CMake: установка переменной окружения для ctest (или иначе получение неудачного тестового вывода из ctest / make test автоматически)
Я хочу, чтобы 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 сбрасывает неудачные тесты, выводимые по умолчанию при обычном вызове "сделать все тесты", не прибегая к экспорту переменной среды глобально в сеансе или прибегая к пользовательской цели, такой как 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")
и экспериментирование показывает, что переменная среды установлена в оболочке, в которой выполняется тестовая программа, но не в оболочка, в которой выполняется ctest.
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
флаг. The --force-new-ctest-process
используется встроенный test
target по умолчанию.