cmake ctest

Cómo ejecutar ctest después de construir mi proyecto con cmake



(1)

Quiero que mis pruebas se inicien cada vez que mi proyecto se construya con éxito. Y si algunas pruebas se rompen, quiero que mi compilación también se rompa. Por defecto, necesito ejecutar las pruebas manualmente ejecutando el comando ctest . CTest realmente puede generar un proyecto, pero uso un IDE que invoca a make para crear fuentes. Y make no ejecuta pruebas.

Agrego este comando a mi archivo raíz CMakeLists.txt pero no funciona.

add_custom_command(OUTPUT tests.txt POST_BUILD COMMAND ctest --output-on-failure)

CMake no devuelve ningún error y todo funciona bien, pero mi comando personalizado no invoca. ¿Cómo puedo ejecutar algo después de cada compilación exitosa en CMake?

Actualizar:

Mi solución final es esta función:

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)

llama a add_test y recuerda el objetivo de prueba en una lista. Cada prueba en un proyecto agregado por esta función. En la raíz CMakeLists.txt tengo este código:

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} )

Crea un objetivo personalizado que depende de todas las pruebas de unidad en un proyecto. El comando personalizado se ejecuta después de que se all_tests construido el objetivo de all_tests las all_tests


Esta forma de add_custom_command solo se ejecutará si otro objetivo CMake tiene una dependencia en "tests.txt". Supongo que ningún otro objetivo tiene "tests.txt" como archivo de entrada, por lo tanto, el comando personalizado nunca se ejecuta.

Creo que podrías usar la segunda forma de add_custom_command para lograr tu objetivo; algo como:

add_custom_command(TARGET MainTest POST_BUILD COMMAND ctest -C $<CONFIGURATION> --output-on-failure)