Chcę, aby moje testy były uruchamiane za każdym razem, gdy mój projekt został pomyślnie zbudowany. A jeśli niektóre testy zostaną przerwane, chcę, aby moja kompilacja również została uszkodzona. Domyślnie muszę uruchomić testy ręcznie, wykonując komendę ctest
. CTest może faktycznie budować projekt, ale używam IDE, który wywołuje make
do budowania źródeł. I make
nie uruchamia testów.Jak uruchomić ctest po zbudowaniu mojego projektu za pomocą cmake
Dodaję to polecenie do mojego głównego pliku CMakeLists.txt, ale to nie działa.
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
CMake nie zwraca żadnych błędów i wszystko jest w porządku, ale moje polecenie niestandardowe nie wywołuje. Jak mogę uruchomić coś po każdej pomyślnej kompilacji w CMake?
Aktualizacja:
Moje ostatnie rozwiązanie jest funkcja:
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)
wywołuje add_test
i pamięta cel testu w postaci listy. Każdy test w projekcie dodanym przez tę funkcję. W głównym katalogu CMakeLists.txt mam ten kod:
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}
)
Tworzy niestandardowy cel, który zależy od wszystkich testów jednostkowych w projekcie. Polecenie niestandardowe jest uruchamiane po zbudowaniu celu docelowego all_tests
.
Dzięki za odpowiedź - w makra, w 'add_test', myślę, że trzeba' $ {target_test} 'zamiast' target_test' – experquisite