首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用googletest的CMake错误

使用googletest的CMake错误
EN

Stack Overflow用户
提问于 2017-04-06 17:32:52
回答 1查看 1.1K关注 0票数 0

这是我的项目结构:

代码语言:javascript
复制
project rts
│   README.md
│   CMakeLists.txt    
│
└───modules
│   │   CMakeLists.txt
│   │
│   └───utils
│       │   CMakeLists.txt
│       │     
│       └───test
│           │   test_main.cpp
│           └───

我有以下错误:

代码语言:javascript
复制
CMake Error: install(EXPORT "RTSModules" ...) includes target "rts_utils" 
which requires target "gtest_main" that is not in the export set.

这是因为我告诉CMake我的模块rts_utils rts_utils需要googletest:

代码语言:javascript
复制
rts_define_module(utils)
target_link_libraries(rts_utils gtest_main)

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

这里的问题是,通常情况下,如果googletest“处于我的完全控制之下”,我会将类似的内容添加到googletest的CMakeLists.txt中:

代码语言:javascript
复制
rts_install_target(gtest gtest_main EXPORT RTSModules ARCHIVE DESTINATION 
${RTS_3P_LIB_INSTALL_PATH} COMPONENT dev)

而不是

代码语言:javascript
复制
install(TARGETS gtest gtest_main DESTINATION lib)

或者至少我是这么看的。但我的问题是,我遵循了googletest自述文件中提供的步骤:“使用CMake下载GoogleTest,作为构建配置步骤的一部分。这有点复杂,但没有其他方法的限制。”

换句话说,我不能修改googletest的CMakeLists.txt,因为我假设任何使用我的项目的人都会马上得到它。我认为,git子模块的想法也会引起类似的问题。

我是否必须返回到包含googletest的“静态快照”并使用适当的导出或修改它,它是否存在一些我不知道的魔术?(我不是CMake的专家).

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-07 05:48:32

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

代码语言:javascript
复制
rts_define_module(utils)
target_link_libraries(rts_utils gtest_main)

致:

代码语言:javascript
复制
rts_define_module(utils)

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

代码语言:javascript
复制
rts_target_link_libraries(${the_target} ${test_deps} 
      ${RTS_MODULE_${the_module}_DEPS} ${RTS_LINKER_LIBS} gtest_main)

这可能需要对googletest的存在进行检查,但现在还可以。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43262081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档