gpt4 book ai didi

testing - CMake:为 ctest 设置环境变量(或以其他方式自动从 ctest/make test 获取失败的测试输出)

转载 作者:行者123 更新时间:2023-11-28 19:38:44 26 4
gpt4 key购买 nike

我希望 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 在正常的“进行所有测试”调用时默认转储失败的测试输出,而无需诉诸在 session 中全局导出环境变量或诉诸自定义目标,例如进行检查(如here所述)?

我知道 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 目标,它使用 调用 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()

必须为单一构建类型和多配置build设置不同的自定义目标。在后一种情况下,必须使用 --build-config 标志将事件构建配置传递给 ctest 调用。 --force-new-ctest-process 默认由内置的 test 目标使用。

关于testing - CMake:为 ctest 设置环境变量(或以其他方式自动从 ctest/make test 获取失败的测试输出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16158091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com