在自定义CMake目标中的从属目标失败后继续



我有一个回归测试套件,由使用add_custom_target()创建的多个自定义目标组成。此外,还有一个";便利性";目标CCD_ 2运行所有回归。它只是将所有单个回归目标作为依赖项包含在内。这反映在以下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 regressionsreg_1reg_2作为regressions的一部分运行。我的问题是,如果其中一个回归失败,其余的就不会执行。但我当然希望总是运行所有的回归,只对失败的回归进行总结。我如何实现这种行为,即始终执行所有子任务,无论其中一些是否失败?

我认为实现这一点的自然方法是使用add_test()(在所有回归运行都是测试之后(,但我失败了,因为自定义目标没有可执行文件,并且AFAIK您不能将自定义CMake目标与add_test()一起使用。

请随意推荐一种替代我目前做法的方法。如果我能使用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)

以上代码解决了问题。此外,如果CMake项目中存在其他测试,regression可以简单地调用ctest -R "regression*"来调用所有(且仅(回归目标,而不是依赖于单个自定义目标,例如:

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

相关内容

  • 没有找到相关文章

最新更新