Voglio che i miei test vengano lanciati ogni volta che il mio progetto viene realizzato con successo. E se alcuni test sono rotti, voglio che anche la mia build venga spezzata. Per impostazione predefinita, ho bisogno di eseguire test manualmente eseguendo il comando ctest
. CTest può effettivamente costruire un progetto ma io uso IDE che invoca make
per creare fonti. E make
non esegue test.Come eseguire ctest dopo aver creato il mio progetto con cmake
Aggiungo questo comando al file radice CMakeLists.txt ma non funziona.
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
CMake non restituisce errori e tutto ciò che costruisce bene ma il mio comando personalizzato non lo fa invoca. Come posso eseguire qualcosa dopo ogni build di successo in CMake?
Aggiornamento:
La mia soluzione finale è questa funzione:
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)
Chiede add_test
e ricorda bersaglio di prova in un elenco. Ogni test in un progetto aggiunto da questa funzione. Nel CMakeLists.txt radice ho questo codice:
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}
)
Si crea obiettivo personalizzato che dipende da tutti i test di unità in un progetto. Il comando personalizzato viene eseguito dopo la creazione dell'obiettivo all_tests
.
Grazie per la risposta - nella macro, in 'add_test', penso che hai bisogno' $ {} target_test 'invece di' target_test' – experquisite