git - 用于作为 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_TESTING
,FOO_INSTALL
但我看不到它们经常使用。
我是否担心太多或错过了什么?为 git 子模块构建(和运行)测试和安装的方法是什么?
解决方案
推荐阅读
- linux - gcc -static 会影响所有提供的库吗?
- ruby-on-rails - f 选择多项选择在表单中不起作用
- node.js - 当服务器应用程序在 EC2 上运行时如何获取用户的浏览器 ID
- highcharts - highcharts,没有数据位置
- ios - 如何在目标 c 中通过 POST 请求捕获标准错误输出并将消息发送到远程日志文件?
- php - 检查数组是否包含与值匹配的数组,然后将结果存储到新数组中
- amazon-web-services - 在亚马逊 AWS 上托管模型
- ios - 离线支持的 Firebase 数据检索问题
- search - AspNetCore.OData 7.1.0“$search”查询选项不起作用
- scikit-learn - 使用类权重的网格搜索和 XGBClassifier