5

我目前正在学习如何为 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....

我的生成文件:

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 *~
4

2 回答 2

8

在链接行上添加了库:

g++ -o Test Test_A.o /usr/lib/libgtest.a /usr/lib/libgtest_main.a -lpthread
于 2013-03-16T04:42:32.800 回答
8

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

  • 要链接到库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 *~
于 2013-03-16T04:42:47.357 回答