『Modern C++ Programming with Test-Driven Development』写経環境をWindows上のCentOSに構築

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

    [toc]

    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