El comando add_test
solo acepta un ejecutable, pero puede ejecutar cualquier ejecutable que realmente sea un script. Para hacer esto de forma cruzada, escriba el script en CMake. CMake tiene la opción -P
para ejecutar fragmentos arbitrarios del lenguaje de scripts CMake cuando ejecuta make
o make test
, en lugar de en el momento de la generación de Makefile.
Lamentablemente, no puede pasar argumentos a dicha secuencia de comandos. Pero puede establecer variables en valores, lo cual es igual de bueno.
Este script se puede llamar runtests.cmake
, que ejecuta los comandos CMD1 y CMD2 y comprueba cada uno por un código de retorno distinto de cero, volviendo fuera de sí mismo CMake con un error si eso sucede:
macro(EXEC_CHECK CMD)
execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT)
if(CMD_RESULT)
message(FATAL_ERROR "Error running ${CMD}")
endif()
endmacro()
exec_check(${CMD1})
exec_check(${CMD2})
.. . y luego añadir los casos de prueba, así:
add_executable(test1 test1.c)
add_executable(test2 test2.c)
add_test(NAME test
COMMAND ${CMAKE_COMMAND}
-DCMD1=$<TARGET_FILE:test1>
-DCMD2=$<TARGET_FILE:test2>
-P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake)
$<TARGET_FILE:test1>
consigue ampliar a la ruta completa al ejecutable del momento de generación acumulación de archivos. Cuando ejecuta make test
o equivalente, esto ejecutará "cmake -P runtests.cmake" estableciendo las variables CMD1 y CMD2 en los programas de prueba apropiados. El script ejecutará sus 2 programas en secuencia. Si cualquiera de los programas de prueba falla, la prueba completa falla. Si necesita ver el resultado de la prueba, puede ejecutar make test ARGS=-V
Hmm ... esto se ve bien, aunque necesito que el script se ejecute durante el tiempo de prueba, no el tiempo de compilación o el tiempo de generación del archivo. –
Oh, por "tiempo de compilación" quise decir cuando ejecutas cualquier comando 'make', incluyendo' make test'. A diferencia de cuando ejecuta 'cmake' para generar los Makefiles. Lo he aclarado en la respuesta ahora. – richq