我希望ctest默认显示失败的测试输出。也就是说,我要运行:
$ make all test
并且无需cat Testing/Temporary/LastTest.log
即可查看失败的测试的任何输出。
似乎有两种方法可以做到这一点:
((1)设置CTEST_OUTPUT_ON_FAILURE
环境变量:
$ CTEST_OUTPUT_ON_FAILURE=1 make all test
$ # or CTEST_OUTPUT_ON_FAILURE=1 ctest
((2)为--output-on-failure
调用指定ctest
标志:
$ ctest --output-on-failure
是否存在编写CMakeLists.txt文件的方法,以使ctests转储默认情况下在正常的“进行所有测试”调用时输出的失败测试,而无需求助于在会话中全局导出环境变量或求助于[ C0](如make check
所述)?
我知道here命令,但是像这样尝试它:
SET_TESTS_PROPERTIES()
并且实验表明,环境变量是在执行测试程序的外壳中设置的,而不是在ctest所执行的外壳中设置的。
内置的CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(testenv CXX)
ENABLE_TESTING()
ADD_EXECUTABLE(hello hello.cpp)
ADD_TEST(testhello hello)
# Following sets the environment variable for the shell in which the test
# progoram 'hello' is run, but not the shell in which ctest is run
SET_TESTS_PROPERTIES(testhello
PROPERTIES ENVIRONMENT "CTEST_OUTPUT_ON_FAILURE=1")
目标不能被修改,但是您可以添加一个自定义的test
目标,该目标通过check
开关以以下方式调用ctest
:
--output-on-failure
对于单个构建类型和多配置构建,必须对自定义目标进行不同的设置。在后一种情况下,必须使用if (CMAKE_CONFIGURATION_TYPES)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
--force-new-ctest-process --output-on-failure
--build-config "$<CONFIGURATION>")
else()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
--force-new-ctest-process --output-on-failure)
endif()
标志将活动的构建配置传递给ctest
调用。内置--build-config
目标默认使用--force-new-ctest-process
。
在CMake 3.17 test
中,有一个新变量release notes,您可以将其设置为将任何命令行参数(包括CMAKE_CTEST_ARGUMENTS)传递给CTest。在您的特定情况下,您现在可以简单地将其添加到CMakeLists.txt:
--output-on-failure