Google Testを使うためのMakefile

Intel C/C++ を用いた Google Test環境を準備するの続き。複数ソースコードファイルがあるときには、makeを使ってコンパイルするのが一般的。なので、テストのための実行ファイルもmakeを使って生成したい。そのためのメモ。ただし、動けばいいやレベルなのでご注意。

このMakefileのサンプルファイルはgtest-1.6.0.zip内の ./make/Makefile が参考になる。このファイルは、../samples 内の sample1.cc と sample1.h をテストする sample1_unittest.cc をコンパイルしている。Google Testのライブラリも同時にコンパイルしている( Intel C/C++ を用いた Google Test環境を準備するのように生成した静的ライブラリを使っていない)。

これを参考に Intel C/C++ を用いた Google Test環境を準備する で用意した環境で動くように作りなおす。

test.cpp と test2.cpp という2つのテスト用ファイルがあるときMakefileは以下のようになる。多分、不要な変数の定義がわさわさ含まれている。とりあえずは動く。

# A sample Makefile for building Google Test and using it in user
# tests.  Please tweak it to suit your environment and project.  You
# may want to move it to your project's root directory.
#
# SYNOPSIS:
#
#   make [all]  - makes everything.
#   make TARGET - makes the given target.
#   make clean  - removes all files generated by make.

CC = icc
CXX = icpc

# Please tweak the following variable definitions as needed by your
# project, except GTEST_HEADERS, which you can use in your own targets
# but shouldn't modify.

# Points to the root of Google Test, relative to where this file is.
# Remember to tweak this if you move this file.
GTEST_DIR = /usr/local/gtest

# Where to find user code.
USER_DIR = .

# Flags passed to the preprocessor.
CPPFLAGS += -I$(GTEST_DIR)/include

# Flags passed to the C++ compiler.
#CXXFLAGS += -g -Wall -Wextra

# All tests produced by this Makefile.  Remember to add new tests you
# created to the list.
TESTS = test_app test2_app

# All Google Test headers.  Usually you shouldn't change this
# definition.
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
                $(GTEST_DIR)/include/gtest/internal/*.h

GTEST_LIBS = $(GTEST_DIR)/lib/libgtest.a $(GTEST_DIR)/lib/libgtest_main.a


# House-keeping build targets.

all : $(TESTS)

clean :
	rm -f $(TESTS) *.o 

# Builds a sample test.  A test should link with either gtest.a or
# gtest_main.a, depending on whether it defines its own main()
# function.
test.o : $(USER_DIR)/test.cpp $(GTEST_HEADERS) $(GTEST_LIBS)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS)  -c $(USER_DIR)/test.cpp 

test_app : test.o 
	$(CXX) $(CPPFLAGS) $(CXXFLAGS)  $^ -o $@ $(GTEST_LIBS) -lpthread

# For Test2
test2.o : $(USER_DIR)/test2.cpp $(GTEST_HEADERS) $(GTEST_LIBS)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS)  -c $(USER_DIR)/test2.cpp 

test2_app : test2.o 
	$(CXX) $(CPPFLAGS) $(CXXFLAGS)  $^ -o $@ $(GTEST_LIBS) -lpthread