2010-06-17 10 views
11

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

ADD_TEST(Test_Name executable args) 

Sin embargo, me he encontrado con un problema, tengo algunas pruebas que requieren dos comandos que se ejecutan en orden para que funcione, es allí ¿De alguna manera puedo ejecutar dos programas dentro de una única prueba, o tengo que crear una nueva prueba para cada uno?

Gracias.

Respuesta

14

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

+0

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. –

+0

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

Cuestiones relacionadas