Как запустить ctest после сборки моего проекта с помощью cmake
Я хочу, чтобы мои тесты запускались каждый раз, когда мой проект был успешно построен. И если некоторые тесты не пройдены, я хочу, чтобы моя сборка тоже была повреждена. По умолчанию мне нужно запустить тесты вручную, запустив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
цель была построена.