Cómo ejecutar ctest después de construir mi proyecto con cmake
Quiero que mis pruebas se inicien cada vez que mi proyecto se construya con éxito. Y si se rompen algunas pruebas, quiero que mi compilación también se rompa. Por defecto necesito ejecutar las pruebas manualmente ejecutandoctest
mando. CTest realmente puede construir un proyecto, pero uso un IDE que invocamake
para construir fuentes. Ymake
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)
llamaadd_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 deall_tests
objetivo fue construido.