C++ の TDD本、『Modern C++ Programming with Test-Driven Development』の写経環境を構築するためのメモです。

ebookはここから購入できる。

各ツールの説明は、書籍の第1章に載っています。自分のPCはWindowsなのですが、Virtual Box 上に CentOSをインストールしてそこに開発環境を構築し、、Sambaを経由してWindows上のEclipse上から写経をしようと考えています。なので、ベースは CentOS。そのへんの導入方法は過去記事を参照のこと。

Windows環境だと、CygwinのgccやVisualStudioを利用するてもあるけれども、コンパイル時間が遅いので今回はやめた。

環境

  • CentOS 6.4(on VirtualBox on Windows 7 64bit)
  • Eclipse 4.3 kepler

ソースコードの取得

githubはこのリンクから。

コードはここからダウンロード可能。

g++

CentOSでは、C++11対応のg++4.7.2をインストールするには一工夫が必要。

cmake

サンプルコードのコンパイルには、cmakeを利用するので必要。

sudo yum -y install cmake
% cmake -version
cmake version 2.6-patch 4

Google Mock

この本の主人公、GoogleMockをインストールします。

まずは、gmockをサイトからダウンロードして解凍。最新版は1.7だが、現時点(2013/10)では、1.7だとサンプルテストがエラーしたので、1.6で入れる。

以下のサイトからダウンロード。

落としたら適当な場所におく。SampleSourseのcmakeでのビルドのために、パスを通す。

export GMOCK_HOME=/home/tsu-nera/tools/gmock

GMOCK_HOMEで、以下を実行。

mkdir mybuild
cd mybuild
cmake ..
make

続いて、gtestの方もビルドする。

cd $GMOCK_HOME/gtest
mkdir mybuild
cd mybuild
cmake ..
make

サンプルコードを動かて、テストが成功すればOK.

cd /home/tsu-nera/repo/modernCTDD/c2/2
cmake CMakeLists.txt
make
./test
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from SoundexEncoding
[ RUN      ] SoundexEncoding.RetainsSoleLetterOfOneLetterWord
[       OK ] SoundexEncoding.RetainsSoleLetterOfOneLetterWord (0 ms)
[----------] 1 test from SoundexEncoding (1 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[  PASSED  ] 1 test.

おまけ、VisualStudioへのGoogleMock導入方法は以前まとめた気がした。

Eclipseの設定

Windows上でのEclipseの設定。前述のとおり、ここでは、Sambaを経路してWindows上から使います。Sambaの設定は省略です。

プロジェクト・エクスプローラを右クリックして、

  • インポート -> C/C++ -> Existing Code as Makefile Project

次に、ヘッダファイルのパスを設定する。プロジェクトのプロパティから

  • C/C++一般 -> パスおよびシンボル

を選択する。インクルードでGMockとGTestのインクルードパスを追加。

Z:\tools\gmock\include
Z:\tools\gmock\gtest\include

リモートビルドの設定はめんどくさかったので、とりあえずビルドはコンソールからコマンドを叩きます。

とりあえず、ここまでで初めの章をすすめる準備が整った。あとはひたすら読み進めるのみだが。。。Keine Zeit!!!

libcurl

Chapter5で必要となる。サイトから最新版をダウンロード。

以下のコマンドでインストール。

tar zvxf curl-7.32.0.tar.gz
export CURL_HOME=/home/tsu-nera/tools/curl-7.32.0
cd $CURL_HOME
mkdir build
cd build
cmake ..
make

JsonCpp

Chapter5で必要となる。サイトから最新版をダウンロード。

インストールには、pythonで書かれたビルドツールsconsというものが必要らしい。(makeのようなもの)。以下から落とす。

適当なところに解凍する。setup.pyが中にあるので、sconsをインストール。

sudo python setup.py install

つづいて、jsonをビルドする。

tar zvxf jsoncpp-src-0.5.0.tar.gz
export JSONCPP_HOME=/home/tsu-nera/tools/jsoncpp-src-0.5.0
cd $JSONCPP_HOME
scons platform=linux-gcc
cd $JSONCPP_HOME/libs
cp linux-gcc-4.4.7/libjson_linux-gcc-4.4.7.so libjson_linux-gcc.so

環境変数のバージョン(gcc 4.4.7)でしか、ビルドできなかった。。。とりあえず動作する。

追記:ビルドのために以下も。

export LD_LIBRARY_PATH=$JSONCPP_HOME/libs:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$CURL_HOME/build/lib:$LD_LIBRARY_PATH

Boost

C++をbotstさせるライブラリ群、Boostをインストールします。以下から、最新版を落とす。

任意のディレクトリに配置して、パスを通す。

tar zvxf boost_1_54_0.tar.gz
export BOOST_ROOT=/home/tsu-nera/tools/boost_1_54_0
export BOOST_VERSION=1.54.0

続いて、必要なライブラリをBuildする。

cd $BOOST_ROOT
./bootstrap.sh --with-libraries=filesystem,system
./b2

CppUTest

レガシーコードに対するモックはGoogleMockよりも、CppUTestのほうがモックしやすいという理由で、CppUTestも紹介されている。以下からダウンロード。

以下でインストール。

tar xvzf cpputest-3.3.tar.gz
export CPPUTEST_HOME=/home/tsu-nera/tools/cpputest-3.3
cd $CPPUTEST_HOME
make
make -f Makefile_CppUTestExt

※3.4,3.5はまだ動かない。

rlog

Chapter8でrlogが使われます。

rlog - C++ logging library - Google Project Hosting

以下でインストール。

tar xvzf rlog-1.4.tar.gz 
export RLOG_HOME=/home/tsu-nera/tools/rlog-1.4
cd $RLOG_HOME