首页 > 解决方案 > 用于作为 git 子模块的库的 CMake 测试

问题描述

情况:您开发了一个使用 CMake 作为其(元)构建系统的库。该库仅是标题(实际上它确实需要,问题仍然适用),具有测试和示例(如基准)。可以通过安装它并使用生成的包文件来使用该库,或者(通常更容易避免 ABI 中的不匹配)将其添加为 agit submodule并简单地添加add_subdirectory它。

问题:在该库中处理测试的最佳方法是什么?

通常顶级 CMake 看起来像这样:

[...setup code, project(...)`]
add_library(foo src/foo.cpp)
target_include_libraries(foo PUBLIC include)

include(CTest)
if(BUILD_TESTING)
  add_subdirectory(tests)
endif()
if(FOO_BUILD_EXAMPLES)
  add_subdirectory(examples)
endif()
install(TARGETS foo ...)
install(...)

我遇到的问题是,当它用作子模块并且超级项目也使用include(CTest)然后BUILD_TESTING启用超级项目测试时,也会启用子模块测试。

这是应该做的和期望的吗?

安装命令类似:安装超级项目也会安装子模块(我认为),这可能是错误的,因为CMAKE_INSTALL_PREFIX给定的内容是针对超级项目的,可能不适合子模块。

这将导致使用前缀和选项FOO_BUILD_TESTINGFOO_INSTALL但我看不到它们经常使用。

我是否担心太多或错过了什么?为 git 子模块构建(和运行)测试和安装的方法是什么?

标签: gittestingcmake

解决方案


推荐阅读