CMake 错误与谷歌测试
CMake error with googletest
这是我的项目结构:
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是否存在,但现在它可以。
- 谷歌测试中的期望值存储在哪里
- 更正 CMakeList.txt 用于谷歌测试的文件?
- 如何让谷歌测试正常运行。测试总是失败。(它不会编译)
- 谷歌测试方法与流
- _mm256_load_ps调试模式下导致谷歌/基准测试的分段错误
- 谷歌测试:模板模板的笛卡尔乘积的类型列表与模板
- C++ 谷歌测试除以零
- 如何使用谷歌基准测试对自定义界面进行基准测试
- 谷歌基准测试,如何只调用一次代码?
- 多定义C ++ / C谷歌测试
- 使用谷歌测试进行测试时出现分段错误
- 如何使用谷歌测试检查两个枚举类元素的相等性?
- 谷歌测试集ArgReferee with vector<unique_ptr>
- 谷歌基准测试结果中显示的时间没有意义
- 如何测试我的谷歌身份验证器实现?
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 谷歌测试发现在macOSX上添加并运行了我的所有测试两次
- 在谷歌测试中创建模拟类的向量
- 为什么在谷歌测试中调用"mkdtemp()"时失败
- 多次调用单个测试-谷歌测试