CMake/CTest, вывод stdout/stderr в отдельные файлы для каждого теста
В наличии большой проект на C/C++/Fortran собираемый в CMake (изменения в коде проблематичны)
Результатом сборки является бинарный файл, который производит расчёт и выводит промежуточные данные в большом кол-ве на стандартные потоки.
Есть постоянно изменяемый набор тестов.
Цель: при создании теста указать, что бы вывод перенаправлялся в отдельный для этого теста файл. Что бы при вызове прогона всех тестов, результат (вывод на потоки) можно было посмотреть отдельно для всех тестов.
В данный момент тест добавляется следующей коммандой
add_test ( NAME "${test_name}"
WORKING_DIRECTORY "${test_dir}"
COMMAND ${APP_NAME} ${test_args}
)
Если к test_args добавить что-нибудь типа 1>out.txt, то при вызове теста параметр обрамляется кавычками и расценивается как строковая команда.
Если вызывать ctest с параметром -VV (ctest -VV > out.txt), то в полученном выводе будет сборная солянка от всех тестов, однако, которую можно распарсить внешним скриптом. Но мне кажется, это не правильное решение.
описанное выше предполагает, что ${test_args} содержит имя выходного файла.
корректнее отделить аргументы от выходного файла отдельной переменной, пусть это будет ${APP_NAME}.log: