在自定义 CMake 目标中依赖目标失败后继续

Continue after dependent target fails in custom CMake target

我有一个回归测试套件,其中包含使用 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_1reg_2 是 运行 作为 regressions 的一部分。 我的问题是,如果其中一个回归失败,则不会执行其余回归。但我当然希望始终 运行 所有回归,并且只对失败的回归进行总结。我怎样才能实现这种行为,即始终执行所有子目标,无论其中一些是否失败?

我假设执行此操作的自然方法是使用 add_test()(在所有回归 运行 都是测试之后),但我失败了,因为自定义目标不是可执行文件,据我所知你不能使用带有 add_test().

的自定义 CMake 目标

请随时推荐替代我当前方法的方法。如果我可以使用 ctest 处理所有事情,那将是首选。

感谢@KamilCuk 的回答,我意识到我无法添加自定义目标作为测试的问题并不是真正的问题。

我可以使用 add_test() 调用 CMake,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 不依赖于单个自定义目标,而是可以简单地调用 ctest -R "regression*" 来调用所有(且仅)回归目标,以防 CMake 项目中存在其他测试,如下所示:

add_custom_target(regressions COMMAND ${CMAKE_CTEST_COMMAND} -R "regression*")