【发布时间】:2017-04-06 17:32:52
【问题描述】:
这是我的项目结构:
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 的 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 README 中提供的步骤:“使用 CMake 下载 GoogleTest 作为构建配置步骤的一部分。这有点复杂,但没有其他方法的限制。 "
换句话说,我无法修改 googletest 的 CMakeLists.txt,因为我假设任何使用我的项目的人都会即时获得它。我认为 git submodule 的想法会导致类似的问题。
我是否必须返回包含 googletest 的“静态快照”并使用适当的 EXPORT 对其进行修改,或者 它是否存在一些我不知道的魔术? (我不是 CMake 专家)。
除了该错误消息之外,使用 googletest ($path_to_project/modules/utils/test/test_main.cpp) 的测试文件编译得很好并且运行良好(使用 CMake)。
【问题讨论】: