这是我的项目结构:
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 rts_utils需要googletest:
rts_define_module(utils)
target_link_libraries(rts_utils gtest_main)我使用的宏与OpenCV项目中使用的宏相同,它们只是以"rts_“而不是"ocv_”开头。
这里的问题是,通常情况下,如果googletest“处于我的完全控制之下”,我会将类似的内容添加到googletest的CMakeLists.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)或者至少我是这么看的。但我的问题是,我遵循了googletest自述文件中提供的步骤:“使用CMake下载GoogleTest,作为构建配置步骤的一部分。这有点复杂,但没有其他方法的限制。”
换句话说,我不能修改googletest的CMakeLists.txt,因为我假设任何使用我的项目的人都会马上得到它。我认为,git子模块的想法也会引起类似的问题。
我是否必须返回到包含googletest的“静态快照”并使用适当的导出或修改它,它是否存在一些我不知道的魔术?(我不是CMake的专家).
除了该错误消息之外,使用googletest ($path_to_project/modules/utils/test/test_main.cpp)的测试文件编译得很好,并且运行良好(使用CMake)。
发布于 2017-04-07 05:48:32
在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的存在进行检查,但现在还可以。
https://stackoverflow.com/questions/43262081
复制相似问题