エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

googletest1.5.0の使い方・その1:ビルドする

「書く書く詐欺」になりつつあった、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.0gtest-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/makeMakefileのサンプルがあります。それを参考に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.xcodeprojXcodeでビルドすればいいんですが、それ以外に。
今回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でいくつか変更点があったので、それについて書いてみたいと思います。