2012-09-07 34 views
5

Estoy usando CMake para construir mi sistema y mis pruebas unitarias.CMake cómo instalar archivos de prueba con pruebas unitarias

También estoy haciendo una construcción fuera de la fuente.

He encontrado con el comando ADD_TEST(), que no necesita instalar el ejecutable de prueba (se ejecutará cuando ejecute make install, que es genial).

Sin embargo, las pruebas de mi unidad dependen de algunos archivos de entrada, que deben copiarse donde está construido el ejecutable.

Por lo que yo sé, no puedo usar INSTALL() para copiar los archivos allí, porque no he especificado dónde existe es - depende de dónde se llame al comando de compilación.

¿Hay alguna manera en que pueda decirle a CMake que copie mis archivos de prueba en la misma ubicación en la que se crea el ejecutable?

Respuesta

1

esto puede no ser la mejor solución, pero actualmente estoy haciendo esto:

file(COPY my_directory DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 

que parece estar haciendo el truco.

+1

Funciona, pero la copia se produce en el momento de la configuración. – fgiraldeau

3

Claro, usted puede hacer esto en el paso de configuración de esta manera:

execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${fileFrom} ${fileTo}) 

Si sus archivos de entrada dependen de algo producido por la acumulación, puede crear un objetivo para él y añadirlo a la meta all:

add_custom_target(copy_my_files ALL 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${fileFrom} ${fileTo} 
    DEPENDS ${fileFrom} 
) 
+0

La variable 'CMAKE_PROGRAM' debe ser' CMAKE_COMMAND' en su lugar. – fgiraldeau

7

Es posible utilizar configure_file con el parámetro COPYONLY. Y realizar la copia en su directorio de construcción: $ {} CMAKE_CURRENT_BINARY_DIR

+0

Un ejemplo: http://stackoverflow.com/a/1587317/1808261 – dtmland

0

La pregunta es bastante antigua, pero en mi opinión hay una mejor solución al problema que copiar los archivos que necesita al ${CMAKE_CURRENT_BINARY_DIR}). El comando add_test tiene una opción WORKING_DIRECTORY que permite elegir el directorio donde se ejecutan las pruebas. Así que sugeriría la siguiente solución:

add_executable(testA testA.cpp) 
add_test(NAME ThisIsTestA COMMAND testA WORKING_DIRECTORY ${DIRECTORY_WITH_TEST_DATA}) 

Esto evita la copia innecesaria de sus archivos de entrada.