cmake command ctest

cmake - CTest con mĂșltiples comandos



command (1)

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 generación de Makefile.

Lamentablemente, no se pueden pasar argumentos a dicho script. Pero puede establecer variables en valores, lo cual es igual de bueno.

Este script puede llamar runtests.cmake , ejecuta los comandos CMD1 y CMD2 y comprueba cada uno para un código de retorno distinto de cero, regresando de 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 agregue sus casos de prueba de esta manera:

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> se expande a la ruta completa al ejecutable en el tiempo de generación del archivo de compilación. Cuando ejecute make test o equivalente, se ejecutará "cmake -P runtests.cmake" estableciendo las variables CMD1 y CMD2 en los programas de prueba correspondientes. 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

Estoy construyendo algunas pruebas usando CTest. Por lo general, puedo configurar la prueba simplemente con la línea:

ADD_TEST(Test_Name executable args)

Sin embargo, me encontré con un problema, tengo algunas pruebas que requieren la ejecución de dos comandos para que funcionen, ¿hay alguna forma de que pueda ejecutar dos programas dentro de una sola prueba o me requieren crear una nueva? prueba para cada uno?

Gracias.