用 cmake 分离 googletest 测试用例

Posted

技术标签:

【中文标题】用 cmake 分离 googletest 测试用例【英文标题】:separating googletest test cases with cmake 【发布时间】:2016-02-10 18:08:53 【问题描述】:

我从事一个使用 CMake 构建的项目,该项目使用 Google 测试进行测试。我的测试的 CMakeLists.txt 文件如下所示:

add_executable(run_tests
    testcase_a.cpp
    dependency_a.cpp
    testcase_b.cpp
    dependency_b.cpp
)
target_link_libraries(run_tests gtest gtest_main)

随着测试用例数量的增加,这变得相当混乱。我想分别编译每个测试用例,然后使用单个二进制文件运行它们。这可以使用 CMake 和 gtest_main 来完成吗?或者有没有更好的方法可以做到这一点,我错过了?

【问题讨论】:

【参考方案1】:

这是基本的想法:-

add_library(testcase_a.o OBJECT testcase_a.cpp dependency_a.cpp)
add_library(testcase_b.o OBJECT testcase_b.cpp dependency_b.cpp)   
add_executable(run_tests $<TARGET_OBJECTS:testcase_a.o> $<TARGET_OBJECTS:testcase_b.o>)
target_link_libraries(run_tests gtest gtest_main)

见Object Libraries

【讨论】:

这看起来像是我需要的解决方案。但是,我无法正确链接 run_tests 可执行文件 - 库抱怨缺少对 gtest 函数的引用。 @Teyras 如果您可以为您的链接失败发布MVCE,也许我可以看到问题所在。现在只能说它对我有用。确保您已经使用与现在构建 run_tests 的编译器完全相同的编译器构建了 libgtest 和 libgtest_main。 嗯,最小的设置似乎可以工作。我会将您的答案标记为正确,并尝试自己解决我的问题。

以上是关于用 cmake 分离 googletest 测试用例的主要内容,如果未能解决你的问题,请参考以下文章

[QtCratot]_0_0_googletest单元测试

CMake GoogleTests 在我的测试文件中找不到导入的头文件

Clion + GoogleTest实现单元测试

CMake + GoogleTest在小型库的集合中给出重新定义错误[重复]

为arm64交叉编译googletest

我可以阻止 GoogleTest-build 修改全局 CMAKE_CXX_FLAGS 变量吗?