C++ の TDD本、『Modern C++ Programming with Test-Driven Development』の写経環境を構築するためのメモです。
ebookはここから購入できる。
各ツールの説明は、書籍の第1章に載っています。自分のPCはWindowsなのですが、Virtual Box 上に CentOSをインストールしてそこに開発環境を構築し、、Sambaを経由してWindows上のEclipse上から写経をしようと考えています。なので、ベースは CentOS。そのへんの導入方法は過去記事を参照のこと。
- CentOS上でSAMBAサーバを立ちあげてWindowsからアクセスするためのメモ | Futurismo
- CentOSを最小構成(minimal)でVMware Playerにインストールした | Futurismo
- Windows上のCentOSをVmwarePlayerからVirtualBoxへ移行した手順 | Futurismo
Windows環境だと、CygwinのgccやVisualStudioを利用するてもあるけれども、コンパイル時間が遅いので今回はやめた。
環境
- CentOS 6.4(on VirtualBox on Windows 7 64bit)
- Eclipse 4.3 kepler
ソースコードの取得
githubはこのリンクから。
コードはここからダウンロード可能。
-
The Pragmatic Bookshelf | Source Codetar xzf lotdd-code.tgz
mv code modernCTDD
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で必要となる。サイトから最新版をダウンロード。
- curl and libcurl
- curl-7.32.0.tar.gz
以下のコマンドでインストール。
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で必要となる。サイトから最新版をダウンロード。
- json-cpp - Browse Files at SourceForge.net
- jsoncpp-src-0.5.0.tar.gz
インストールには、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をインストールします。以下から、最新版を落とす。
- Boost C++ Libraries - Browse /boost/1.54.0 at SourceForge.net
- boost_1_54_.0.tar.gz
任意のディレクトリに配置して、パスを通す。
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