我有一个回归测试套件,由使用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 regressions
,reg_1
和reg_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*")