Moric
@Moric

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), то в полученном выводе будет сборная солянка от всех тестов, однако, которую можно распарсить внешним скриптом. Но мне кажется, это не правильное решение.

Какие есть иные варианты решения?
  • Вопрос задан
  • 3337 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kpeo
можно сделать обертку как скрипт bash/python, например:

my_test.sh:
#!/bin/sh
./$1 > $2 2>&1

и запускать его в тестах с аргументом (для данной команды):

add_test ( NAME "${test_name}"
WORKING_DIRECTORY "${test_dir}"
COMMAND ${APP_NAME} ${test_dir}/my_test.sh ${APP_NAME} ${test_args}
)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы