如何使用带有Jam的gtest_main库构建googletest单元测试?

时间:2010-10-08 19:09:15

标签: unit-testing googletest jam

我正在尝试构建一个googletest单元测试,以便将概念证明作为我们可能使用的新单元测试框架。在googletest中,有两种方法可以编写单元测试:使用main或没有main。如果你没有定义一个main,你可以链接到gtest_main库,它包含一个main()函数,为你节省一些时间。在我的环境中,我们使用Jam来构建二进制文件。我已经在我的代码和代码中使用main()编译了二进制文件。通过使用libgtest库,但我正在寻找如何在没有main的情况下在Jam中构建它。

基本案例(使用main()函数):

我可以用这个构建二进制文件:

Main MyUnitTestBinary : MyClass.cpp ;
LinkLibraries MyUnitTestBinary : libgtest ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;

破案(没有main()函数):

我无法使用此构建二进制文件。当我尝试链接对象时,我看到很多错误:

Main sample1_unittest : sample1.cc sample1_unittest.cc ;
LinkLibraries sample1_unittest : gtest_main ;
Library gtest_main : $(GTEST_DIR)/src/gtest_main.cc ;

我得到很多与未定义的引用相关的链接器错误。未定义的引用似乎来自于test :: internal命名空间,它不是我的代码的一部分。

有关我如何攻击这个问题的任何想法,或者想要找到更多关于这个问题的线索?

1 个答案:

答案 0 :(得分:5)

我找到了答案!我错误地没有将libgtest和gtest_main添加到二进制文件中。我认为gtest_main还包括框架的定义,你需要链接其中一个。实际上,您总是需要链接libgtest,并且只有在您不想更改标准main()函数时才需要链接gtest_main。

所以...正确的答案是添加:

LinkLibraries sample1_unittest : libgtest gtest_main ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;