2011/09/20

gccとCMakeでgoogletestをビルドする方法(Mac OS X編)

Webを調べていると、googletestをビルドする際にVC++かXCodeを使う例が多かったので、IDEを使わないでできる方法を調べてみました。なお、googletest自体の説明は割愛します。


環境
私の環境は以下の通りです。

  • Max OS X 10.6.8(Snow Leopard)
  • gcc 4.5.4
  • cmake 2.8.5
公式のREADMEには cmake 2.6.4 以上が必要とありますが、gccのバージョンは明記されていませんでした。

手順

  1. svnリポジトリからgoogletestを取得する
  2. cmakeでgoogletestをビルドする
  3. main関数を持つソースファイルを作成する
  4. テストコードを作成する
  5. g++でテストコードでビルドする
  6. テストを実行する

(1) svnリポジトリからgoogletestを取得する

適当な場所に配置します。

svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn

(2) cmakeでgoogle testをビルドする

cmakeを実行するディレクトリも適当な場所で良いです。 {GTEST_DIR}はgoogletestのあるパスに置き換えてください。 libgtest.a と libgtest_main.a ができれば成功です。

mkdir mybuild
cd mybuild
cmake ${GTEST_DIR}
make
なお、ビルド関係はREADMEが参考になります。

(3) main関数を持つソースファイルを作成する

以下のソースファイルを参考に、main関数のあるソースファイルを作成します。

ファイル名はtestmain.ccとしました。ちなみに必ず以下の順に呼ばないといけないようです。
  • testing::InitGoogleTest(&argc, argv);
  • RUN_ALL_TESTS();
#include <iostream>

#include "gtest/gtest.h"

GTEST_API_ int main(int argc, char **argv) {
  std::cout << "Running main() from testmain.cc\n";

  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

(4) テストコードを作成する

テストコードを作成します。ファイル名はmytest.ccとしました。
#include "gtest/gtest.h"

TEST(firstTest, abs)
{
  EXPECT_EQ(1, abs( -1 ));
  EXPECT_EQ(1, abs( 1 ));
}

(5) g++でテストコードをコンパイルする

コンパイルする時はgoogle testのヘッダファイルがあるディレクトリをインクルードパスに入れる必要があります。また、cmakeでビルドした時にできたライブラリも含めてビルドします。

なお、以下のコマンド中の testmain.cc はmain関数が入っているファイル、mytest.cc がテストコードが入っているファイルです。また、{GTEST_DIR}はgoogletestが入っているディレクトリのパスに置き換えてください。

g++ -I{GTEST_DIR}/include testmain.cc mytest.cc libgtest.a libgtest_main.a -o mytest
(6) テストを実行する
できあがったバイナリを実行すると、テスト結果が表示されます。テスト結果がOKなら成功です。

0 件のコメント:

コメントを投稿