2009-10-20 20 views
8

Estoy intentando automatizar mi proceso de compilación con cmake. Actualmente sólo hay una cuestión:cmake: Cómo hacer un script para copiar los archivos de datos que acompañan a mi programa

¿Dónde está, en la filosofía de cmake (si lo hay), el mejor lugar para poner la copia de los archivos de datos.

Tengo una biblioteca y algunos ejemplos. Los ejemplos necesitan los datos.

Actualmente hago lo siguiente:

Puedo usar un comando personalizado en cada ejemplo de CMakeLists.txt para copiar todos los datos en el CMAKE_CURRENT_BINARY_DIR en una etapa posterior a la generación. Lo uso en mi flujo de trabajo de depuración, por lo que aún no se ejecuta ningún objetivo de instalación.

Esto funciona bastante bien, pero tiene algunos inconvenientes:

  1. La copia se produce cada vez que se genere el proyecto. Con VS 2005, esto a veces ocurre incluso si no está recién construido. Dado que las carpetas de datos son grandes, la copia toma tiempo y se vuelve un poco molesto.
  2. Estoy seguro de que esta es una forma muy torpe de hacer esto.

quiero copiar los directorios a los caminos ejecutables, por lo que no necesito consejos de cómo establecer el directorio de trabajo de depuración

El momento perfecto para copiar estos directorios estaría en la configuración cmake/tiempo de generación , Al menos eso pienso. ¿Debería hacer esto y cómo lo haría?

Respuesta

12

Como se ha visto recientemente en this question, puede utilizar configure_file para copiar archivos en el directorio de construcción:

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/input.txt 
    ${CMAKE_CURRENT_BINARY_DIR}/output.txt COPYONLY) 

que lo hace una vez en el tiempo de construcción y sólo cuando sea necesario.

+2

Gracias! Me sorprende que haya tan pocas respuestas a esta pregunta. CMake es ampliamente utilizado ahora, pero aún está poco documentado. Muy pocas personas parecen entender realmente cmake. – AndreasT

+2

'cmake --help-full' FTW! :-) – richq

Cuestiones relacionadas