情况:您要开发一个使用CMake作为其(元)构建系统的库。该库仅是标头(实际上确实需要,该问题仍然适用),具有测试和示例(如基准)。可以通过安装库并使用生成的程序包文件来使用该库,也可以将其添加为git submodule
并简单地add_subdirectory
来使用(通常更容易避免ABI中的不匹配)。
问题:在该库中处理测试的最佳方法是什么?
通常,顶级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_TESTING
和FOO_INSTALL
,但我不认为它们经常使用。
我担心太多还是错过了什么?为git子模块构建(并运行)测试和安装的方式是什么?