我希望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)为ctest
调用指定--output-on-failure
标志:
$ ctest --output-on-failure
是否有一种方法可以编写CMakeLists.txt文件,以便ctests在默认情况下将失败的测试输出转储为正常的"make all test"调用,而不诉诸于在会话中全局导出环境变量或诉诸于自定义目标,如make check
(如此处所述)?
我知道SET_TESTS_PROPERTIES()
命令,但试着这样做:
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")
和实验表明环境变量是在执行测试程序的shell中设置的,而不是在执行ctest的shell中设置的。
不能修改内置的test
目标,但是您可以添加一个自定义的check
目标,它通过--output-on-failure
开关调用ctest
,方法如下:
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()
必须为单一构建类型和多配置构建设置不同的自定义目标。在后一种情况下,必须使用--build-config
标志将活动构建配置传递给ctest
调用。--force-new-ctest-process
默认由内置test
目标器使用
现在有一个列表变量CMAKE_CTEST_ARGUMENTS
,您可以在其中设置ctest参数。