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

Including gtest libraries in Makefiles for unit test files:

本文关键字:gtest 文件 单元测试 Makefiles 包含 用于      更新时间:2023-10-16

我目前正在学习如何在c++中制作和使用MakeFiles程序。我已经能够为正常的。cpp类创建和运行Makefiles,但我遇到了测试类的问题。对于测试,我在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 *~

库被添加到链接行:

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

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

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

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

虽然-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 *~