在Makefiles中包含用于单元测试文件的gtest库:

时间:2013-03-16 04:39:04

标签: c++ makefile codeblocks googletest

我目前正在学习如何在C ++中为程序制作和使用MakeFiles。我已经能够为普通的.cpp类创建和运行Makefile,但是我遇到了测试类的问题。为了测试我在Code :: Blocks中使用Gtest,在“链接器设置”中的Test_A.cpp文件中添加:

 /usr/lib/libgtest.a
 /usr/lib/libgtest_main.a

对于其他链接器选项我放了“-pthread”。我知道在某种程度上这些库需要添加到makefile中,但我无法弄清楚如何。我原本以为他们需要在第3行添加,但我尝试的所有内容都会返回数千行类型的错误:

 undefined reference to `testing::Test::TearDown()
 undefined reference to `testing::Test::~Test()  etc....

我的makefile:

1. all: Test

2. Test_A.o: Test_A B.h
3.      g++ -c Test_A.cpp -o Test_A.o

4. Test: Test_A.o
5.      g++ -o Test Test_A.o

6. clean:
7.      rm -rf *o *~

2 个答案:

答案 0 :(得分:8)

在构建最终二进制文件时,您需要将库名称列表传递给链接器。 LDFLAGS是Makefile中使用的变量,用于指示传递给链接器的标志列表。

  • 要链接库libabc.alibabc.so,您需要将链接器标记传递为-labc

  • 要指定库的位置,您需要使用-L标志。请注意,除LD_LIBRARY_PATH中定义的目录外,链接器还会在/etc/ld.so.conf中的目录中搜索您的库。

虽然-L/usr/lib在您的情况下是可选的,(因为您的发行版应该已经配置了ld.so.conf来从/usr/lib获取库),我已经在下面显示它以防万一你想把它改成不同的位置。

LDFLAGS := -lpthread -lgtest -lgtest_main -L/usr/lib

all: Test

Test_A.o: Test_A B.h
     g++ -c Test_A.cpp -o Test_A.o

Test: Test_A.o
     g++ -o Test Test_A.o $(LDFLAGS)

clean:
     rm -rf *o *~

答案 1 :(得分:7)

在链接行添加了库:

g++ -o Test Test_A.o /usr/lib/libgtest.a /usr/lib/libgtest_main.a -lpthread