CMake 错误与谷歌测试

CMake error with googletest

本文关键字:测试 谷歌 错误 CMake      更新时间:2023-10-16

这是我的项目结构:

project rts
│   README.md
│   CMakeLists.txt    
│
└───modules
│   │   CMakeLists.txt
│   │
│   └───utils
│       │   CMakeLists.txt
│       │     
│       └───test
│           │   test_main.cpp
│           └───

我有以下错误:

CMake Error: install(EXPORT "RTSModules" ...) includes target "rts_utils" 
which requires target "gtest_main" that is not in the export set.

这来自于我告诉CMake我的模块rts_utils($path_to_project/modules/utils/CMakeLists.txt)需要googletest:

rts_define_module(utils)
target_link_libraries(rts_utils gtest_main)

我使用的是与OpenCV项目相同的宏,它们只是以"rts_"而不是"ocv_"开头。

这里的问题是,通常情况下,如果googletest"在我的完全控制之下",我会在googletest的CMakeList.txt中添加类似的东西:

rts_install_target(gtest gtest_main EXPORT RTSModules ARCHIVE DESTINATION 
${RTS_3P_LIB_INSTALL_PATH} COMPONENT dev)

而不是

install(TARGETS gtest gtest_main DESTINATION lib)

或者至少我是这样看待这件事的。但我的问题是我按照谷歌测试自述文件中提供的步骤进行操作:"使用 CMake 下载 GoogleTest 作为构建配置步骤的一部分。这只是稍微复杂一点,但没有其他方法的局限性。

换句话说,我不能修改googletest的CMakeLists.txt因为我假设任何使用我的项目的人都会立即获得它。我认为 git 子模块的想法会导致类似的问题。

我是否必须回到包含googletest的"静态快照"并使用适当的EXPORT对其进行修改,或者它是否存在一些我不知道的魔术?(我不是CMake的专家)。

除了该错误消息之外,使用 googletest ($path_to_project/modules/utils/test/test_main.cpp) 的测试文件编译良好且运行良好(使用 CMake)。

在 utils 模块 CMakeLists.txt 中,我更改了:

rts_define_module(utils)
target_link_libraries(rts_utils gtest_main)

自:

rts_define_module(utils)

我没有链接到这里,而是将其移动到用于生成测试目标的宏 rts(ocv)_add_accuracy_tests() :

rts_target_link_libraries(${the_target} ${test_deps} 
${RTS_MODULE_${the_module}_DEPS} ${RTS_LINKER_LIBS} gtest_main)

这可能需要检查googletest是否存在,但现在它可以。