「書く書く詐欺」になりつつあった、googletest 1.5.0の解説。ようやく着手です。
今までは、「./configure
してmake
してsudo make install
すればOK」…という具合にやってきていたんですが、Version1.5.0ではこの方法を正式には採用しない方針に変更したようです。
そのように考えた理由がここに書かれています。
要は。コンパイル済みのライブラリを作ってしまうと、コンパイル条件を変更したいときとかに追従できなくていろいろ悪さする可能性があるから、ということのようです。で、テストをビルドするときにgoogletestのコードも一緒にコンパイルしてくださいな、ということみたいです。
READMEファイルの内容とgtest-1.5.0/src/Makefile
の焼き直しですが、Version1.5.0のビルドの仕方を簡単に説明。
直接ビルド
次のようなテスト対象とテストがあったとします。
テスト対象のファイル。
// hoge.h #ifndef HOGE_H #define HOGE_H int add(int lhs, int rhs); #endif//HOGE_H
// hoge.cpp #include "hoge.h" int add(int lhs, int rhs) { return lhs + rhs; }
テストを実施するファイル。
// hogeTest.cpp #include <gtest/gtest.h> #include "hoge.h" TEST(TestCase1, Test1) { ASSERT_EQ(3, add(1, 2)); }
これらのファイルが格納されているとなりのgtest-1.5.0
というフォルダにgoogletestのコードがあるとした場合、テストのビルドは次のようになります。
g++ -I../gtest-1.5.0 -I../gtest-1.5.0/inclcude -o hogeTest hogeTest.cpp hoge.cpp ../gtest-1.5.0/src/gtest-all.cc ../gtest-1.5.0/src/gtest_main.cc
gtest-1.5.0
とgtest-1.5.0/include
にインクルードファイルの検索パスを設定し、ビルド対象にgtest-1.5.0/src/gtest-all.cc
を含めます。gtest-1.5.0/src/gtest_main.cc
には、エントリポイントであるmain
関数が記述されています。自分でmain
関数を書く場合にはこちらはビルドに含めなくてもかまいません。
Makefileでビルド
gtest-1.5.0/make
にMakefileのサンプルがあります。それを参考にMakefileを書いてみました。達人の方から見れば突っ込みどころ満載だと思いますが、こんな雰囲気でビルドできますよ、というサンプルということで。テスト対象とテストは上記と一緒です。
GTEST_DIR = ../gtest-1.5.0 CPPFLAGS += -I$(GTEST_DIR)/include -I$(GTEST_DIR) hogeTest: hogeTest.o hoge.o gtest_main.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h $(GTEST_DIR)/include/gtest/internal/*.h GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS) gtest-all.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(GTEST_DIR)/src/gtest-all.cc gtest_main.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(GTEST_DIR)/src/gtest_main.cc gtest.a : gtest-all.o $(AR) $(ARFLAGS) $@ $^ gtest_main.a : gtest-all.o gtest_main.o $(AR) $(ARFLAGS) $@ $^ .cpp.o: $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $<
Xcodeでビルド
Mac OS Xの話。
単純にgtest-1.5.0/xcode/gtest.xcodeproj
をXcodeでビルドすればいいんですが、それ以外に。
今回READMEファイルを呼んでいてxcodebuild
というコマンドの存在を知りました。 gtest-1.5.0/xcode/
のフォルダでこのコマンドを実行するとReleaseバージョンがビルドされます。
gtest-1.5.0/xcode/build/Release/
にgtest.framework
というフォルダができるのでこれをフォルダごと/Library/Frameworks/
にコピー。
あとは通常のフレームワーク同様、プロジェクトに追加すれば利用できるようになります。
このあとは。Version1.3.0から1.4.0/1.5.0でいくつか変更点があったので、それについて書いてみたいと思います。