首页 > 解决方案 > 在自定义 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,那将是首选。

标签: testingcmakeregressiontargetctest

解决方案


感谢@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*")

推荐阅读