testing - 在自定义 CMake 目标中依赖目标失败后继续
问题描述
我有一个回归测试套件,其中包含多个使用add_custom_target()
. 此外,还有一个“方便”目标regressions
来运行所有回归。它仅包含所有单个回归目标作为依赖项。这反映在以下 MCVE 中:
cmake_minimum_required(VERSION 3.17)
project (Regressions)
add_custom_target(reg_1 COMMAND ${CMAKE_COMMAND} -E echo 'First regression')
add_custom_target(reg_2 COMMAND ${CMAKE_COMMAND} -E echo 'Second regression')
# ...
add_custom_target(regressions DEPENDS reg_1 reg_2)
现在我可以cmake --build . --target regressions
从构建目录运行,reg_1
并且reg_2
作为regressions
. 我的问题是,如果其中一个回归失败,其余的都不会执行。但当然,我希望始终运行所有回归,并且只对失败的回归进行总结。我怎样才能实现这种行为,即始终执行所有子目标,无论其中一些是否失败?
我认为这样做的自然方法是使用add_test()
(在所有回归运行都是测试之后),但我失败了,因为自定义目标不是可执行文件,并且 AFAIK 你不能使用自定义 CMake 目标和add_test()
.
请随时推荐我当前方法的替代方法。如果我可以使用它来处理所有事情ctest
,那将是首选。
解决方案
感谢@KamilCuk 的回答,我意识到无法将自定义目标添加为测试的问题并不是真正的问题。
我可以使用 调用 CMake add_test()
,并且该cmake
命令可以运行自定义目标。
添加:
enable_testing()
add_test(NAME regression1 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target reg_1)
add_test(NAME regression2 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target reg_2)
上面的代码解决了这个问题。regression
此外,如果 CMake 项目中存在其他测试,则可以简单地调用ctest -R "regression*"
以调用所有(且仅)回归目标,而不是依赖于单个自定义目标,如下所示:
add_custom_target(regressions COMMAND ${CMAKE_CTEST_COMMAND} -R "regression*")
推荐阅读
- wordpress - 在 woocommerce 中添加比较价格
- theorem-proving - 如何证明 Mizar(数学定理证明语言)中有一个等于 1 的自然数?
- java - 如何将 comp3 文件解压缩为可读格式?
- python - 如何摆脱 Pycharm 控制台中的省略号并使用 Quandl 显示信息?
- haskell - 读取语句列表并以单个表达式结尾,when 语句可以是表达式
- debugging - PyCharm 在调试模式下说“无法显示帧变量”?(与 gevent 无关)
- python - 如何应用动态规划来计算图中的最短路径?
- google-cloud-platform - 在数据存储中创建/更新触发云功能
- python - 从一列中提取并复制以“Unit”开头的字符串到新列:Pandas
- php - 如何从 Soap Webservice 转换结果并在刀片 laravel 中显示?