让 CMake 设置 CTtest 在单个测试的输出周围打印页眉和页脚

Joa*_*m W 4 cmake ctest

有没有一种方法,最好是从CMakeLists.txt,设置ctest

  • 在运行各个测试之前打印标题,
  • 运行各个测试后打印页脚,
  • 使页脚依赖于测试是否全部成功?

页脚应出现在默认输出下方

The following tests FAILED:
       76 - MyHardTest
Errors while running CTest
Run Code Online (Sandbox Code Playgroud)

这具体化并概括了一个两年多以来一直存在的不太明确的问题(CMakeLists.txt:如果 ctest 失败如何打印消息?)。因此,我担心没有简单的解决方案。

由此而来的另一个问题是:可以通过 实现期望的行为CDash吗?

Joa*_*m W 6

是的,CTest 确实有宏来实现这一点 [1]:

  • CTEST_CUSTOM_PRE_TEST在测试阶段运行任何测试之前执行的命令
  • CTEST_CUSTOM_POST_TEST在测试阶段运行任何测试后执行的命令

要激活这些宏以cmake供使用ctest,必须以某种方式将它们放入构建目录中。看来,需要两个步骤:

(1)scriptdir/CTestCustom.cmake.in在源代码树中的某个位置有一个脚本,其中包含

set(CTEST_CUSTOM_POST_TEST "echo AFTER_THE_TEST")
Run Code Online (Sandbox Code Playgroud)

或任何命令而不是“echo”

(2)CMakeLists.txt打电话

configure_file("scriptdir/CTestCustom.cmake.in" ${CMAKE_BINARY_DIR}/CTestCustom.cmake)
Run Code Online (Sandbox Code Playgroud)

这样在配置阶段,CTest 配置文件就会被放置CTestCustom.cmake构建目录中的首选名称 [2] 下。

[1] https://cmake.org/Wiki/CMake/Testing_With_CTest [2] https://blog.kitware.com/ctest-performance-tip-use-ctestcustom-cmake-not-ctest/