【发布时间】:2020-10-28 17:47:14
【问题描述】:
我有一个回归测试套件,其中包含多个使用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 处理所有事情,那无论如何都是首选。
【问题讨论】:
-
这看起来真的很像测试,你可以使用
ctest。custom targets are no executables and AFAIK you cannot use custom CMake targets with add_test()?就在那时add_test(COMMAND ${CMAKE_COMMAND} --target custom_target)。你似乎在问 XY 问题。您真正的问题似乎是如何在add_test()中使用自定义 cmake 目标。 -
天哪!看来我今天太傻了。谢谢@KamilCuk,如果我可以通过调用 CMake 来运行目标,我当然可以运行适当的测试...
标签: testing cmake regression target ctest