Linux平台如何编译使用Google test写的单元测试?

晨曦之光 发布于 2012/03/09 14:15
阅读 479
收藏 0
本博客 http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

Linux平台如何编译单元测试的代码?(请参考readme文件)

 

Step1. 编译gtest-all.ccgtest_main.cc文件

g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc

g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest_main.cc

 

Step2. step1生成的gtest-all.ogtest_main.o打包成静态库libgtest.a

ar -rv libgtest.a gtest-all.o gtest_main.o

 

Step3. 编译要测试的代码(假设文件名为sample.cpp)

g++ -I${GTEST_DIR}/include -c sample.cpp

 

Step4. 编译单元测试的代码(假设文件名为test.cpp)

g++ -I${GTEST_DIR}/include -c test.cpp

 

Step5. libgtest.a或其他需要的库链接、生成可执行程序

g++ -I${GTEST_DIR}/include test.o sample.o libgtest.a -o test

 

其他的库,如pthread库。

Where, GTEST_DIR=/usr/src/gtest-1.5.0

 

编写的makefile文件如下。

简单版本

all:

g++ -I/usr/src/gtest-1.5.0/include -I/usr/src/gtest-1.5.0 -g -c /usr/src/gtest-1.5.0/src/gtest-all.cc

g++ -I/usr/src/gtest-1.5.0/include -I/usr/src/gtest-1.5.0 -g -c /usr/src/gtest-1.5.0/src/gtest_main.cc

ar -rv libgtest.a gtest-all.o gtest_main.o

g++ -I/usr/src/gtest-1.5.0/include -g -c sample.cpp

g++ -I/usr/src/gtest-1.5.0/include -g -c test.cpp

g++ -I/usr/src/gtest-1.5.0/include -lpthread test.o sample.o libgtest.a -g -o test

clean:

rm test libgtest.a *.o

 

实际上,其中将gtest-all.ogtest_main.o压缩为libgtest.a库,可以省去,直接使用.o文件,如下。

all:

g++ -I/usr/src/gtest-1.5.0/include -I/usr/src/gtest-1.5.0 -g -c /usr/src/gtest-1.5.0/src/gtest-all.cc

g++ -I/usr/src/gtest-1.5.0/include -I/usr/src/gtest-1.5.0 -g -c /usr/src/gtest-1.5.0/src/gtest_main.cc

g++ -I/usr/src/gtest-1.5.0/include -g -c sample.cpp

g++ -I/usr/src/gtest-1.5.0/include -g -c test.cpp

g++ -I/usr/src/gtest-1.5.0/include -lpthread test.o sample.o gtest-all.o gtest_main.o -g -o test

clean:

rm test *.o

正式版本

# Google Test directory

GTEST_DIR = /usr/src/gtest-1.5.0

 

# Flags passed to the preprocessor.

CPPFLAGS += -I$(GTEST_DIR)/include

 

# Flags passed to the C++ compiler.

CXXFLAGS += -g -Wall -Wextra

 

# All Google Test headers.  Usually you shouldn't change this definition.

GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h $(GTEST_DIR)/include/gtest/internal/*.h

 

# All Google Test sources

GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)

 

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

TESTS = test

 

all : $(TESTS)

 

clean :

rm -f $(TESTS) gtest.a gtest_main.a *.o

 

gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc          # $(GTEST_SRCS_)

$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(GTEST_DIR)/src/gtest-all.cc

 

gtest_main.o : $(GTEST_DIR)/src/gtest_main.cc        # $(GTEST_SRCS_)

$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(GTEST_DIR)/src/gtest_main.cc

 

gtest_main.a : gtest-all.o gtest_main.o

$(AR) $(ARFLAGS) $@ $^

 

sample.o : sample.cpp sample.h $(GTEST_HEADERS)

$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c sample.cpp

 

test.o : test.cpp sample.h $(GTEST_HEADERS)

$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c test.cpp

 

test : sample.o test.o gtest_main.a

$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@

$^代表依赖项,$@代表目标。

 

Reference

Readme

Makefile of sample


Technorati 标签:


原文链接:http://blog.csdn.net/livelylittlefish/article/details/6143559
加载中
返回顶部
顶部