【问题标题】:CMake error with googletestgoogletest 的 CMake 错误
【发布时间】: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)。

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    在 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 是否存在,但现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2017-09-16
      • 2023-02-09
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多