【问题标题】:How can I build a googletest unit test using the gtest_main library with Jam?如何使用带有 Jam 的 gtest_main 库构建 googletest 单元测试?
【发布时间】:2010-10-09 07:20:46
【问题描述】:

我正在尝试构建一个 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 ;

我收到许多与未定义的 blah 引用有关的链接器错误。未定义的引用似乎来自 testing::internal 命名空间,这不是我的代码的一部分。

有什么想法可以解决这个问题,或者寻找更多关于这个问题的线索?

【问题讨论】:

    标签: unit-testing googletest jam


    【解决方案1】:

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

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

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

    【讨论】:

    • 我还收到了链接错误“gtest undefined reference to regfreeA”和“gtest undefined reference to regexecA”。感谢您发布您的解决方案!
    猜你喜欢
    • 2014-06-20
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多