3

有没有办法,理想情况下CMakeLists.txt,设置ctest

  • 在运行单个测试之前打印一个标题,
  • 运行单个测试后打印页脚,
  • 使页脚取决于测试是否全部成功?

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

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

这具体化并概括了一个自 2 年多以来一直未解决的问题(CMakeLists.txt: How to print a message if ctest failed?)。因此,我担心没有简单的解决方案。

因此,另一个问题是:期望的行为可以实现CDash吗?

4

2 回答 2

4

是的,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")

或任何命令而不是“回声”

(2) 让CMakeLists.txt调用

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

因此,在配置阶段,CTest 配置文件将放置在构建目录中的首选名称 [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/

于 2016-06-10T12:59:46.080 回答
0

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

对于您的应用程序,我能想到的最简单的方法是在顶部和底部添加两个空测试作为页眉和页脚的占位符。Ctest 在最后已经有一个“以下测试失败:”类型的输出,所以你可能不必担心它。任何类型的条件逻辑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)

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

于 2016-06-08T14:44:41.080 回答