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
флаг. --force-new-ctest-process
используется встроенным test
цель по умолчанию.
Теперь есть переменная списка CMAKE_CTEST_ARGUMENTS
в котором вы можете установить аргументы ctest.
https://cmake.org/cmake/help/latest/variable/CMAKE_CTEST_ARGUMENTS.html