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

Let CMake setup CTtest to print header and footer around the output from single tests

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

页脚应显示在默认输出下方

The following tests FAILED:
       76 - MyHardTest
Errors while running CTest

这具体化并概括了一个开放了 2 年多 (CMakeLists.txt: How to print a message if ctest fails?) 的有点不清楚的问题。因此,我担心没有简单的解决方案。

因此,另一个问题是:CDash 能否实现所需的行为?

在我的研究过程中,我发现集成这样的东西非常困难。我不完全确定,但我相信您可以在 CTestScript 中执行此操作,然后创建一个 add_custom_target 以始终允许该脚本使用 ctest 执行。例如,命令 make check 现在将 运行 ctest 与您制作的 CTestScript... 工作量太大?

我能为您的应用程序想到的最简单方法是在顶部和底部添加两个空测试作为页眉和页脚的占位符。 Ctest 在最后已经有一个 "The following tests FAILED:" 类型的输出,所以你可能不必担心它。任何类型的条件逻辑 IF TEST FAILED DO THIS,你目前不能在 ctest 中执行。

add_test(NAME HEADER_GOES_HERE)
add_test(NAME ACTUAL_TEST COMMAND test)
add_test(NAME FOOTER_GOES_HERE)

也许有人可以给你更好的答案,但这是我能想到的最简单(一点也不好)的实现方式。

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

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

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

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

set(CTEST_CUSTOM_POST_TEST "echo AFTER_THE_TEST")

或任何命令而不是 "echo"

(2) 让CMakeLists.txt调用

configure_file("scriptdir/CTestCustom.cmake.in" ${CMAKE_BINARY_DIR}/CTestCustom.cmake)

以便在配置阶段将 CTest 配置文件放置在 build 目录中的首选名称 [2] CTestCustom.cmake 下。

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