Я хочу, чтобы мои тесты запускались каждый раз, когда мой проект был успешно построен. И если некоторые тесты не пройдены, я хочу, чтобы моя сборка тоже была повреждена. По умолчанию мне нужно запускать тесты вручную с ctest
команды ctest
. CTest может фактически собрать проект, но я использую IDE, которая вызывает make
для создания исходных текстов. И make
не запускает тесты.
Я добавляю эту команду в мой корневой файл CMakeLists.txt, но она не работает.
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
CMake не возвращает никаких ошибок, и все работает нормально, но моя пользовательская команда не запускается. Как я могу запустить что-то после каждой успешной сборки в CMake?
Обновить:
Мое окончательное решение заключается в создании этого макроса:
macro(add_unit_test target target_test)
set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target_test} PARENT_SCOPE)
add_test(target ${CMAKE_CURRENT_BINARY_DIR}/${target_test})
endmacro(add_unit_test)
Вызывает add_test
и запоминает цель теста в списке. Каждый тест в проекте добавляется этим макросом. В корне CMakeLists.txt у меня есть этот код:
add_custom_target( all_tests ALL
DEPENDS ${UNIT_TEST_TARGETS}
)
add_custom_command(TARGET all_tests
COMMENT "Run tests"
POST_BUILD COMMAND ctest ARGS --output-on-failure
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
Он создает пользовательскую цель, которая зависит от всех модульных тестов в проекте. Пользовательская команда запускается после all_tests
цель all_tests
была построена.