2010-11-19 10 views
5

En mi proyecto tengo un archivo de "esquema" y una utilidad que escribí para generar un archivo de encabezado. Estoy usando cmake y compilación fuera de la fuente para compilar la aplicación.¿Cómo generar un encabezado en la fuente con cmake?

Actualmente tengo que regenerar el archivo de encabezado a mano y luego compilar la aplicación.

Luego presenté estas declaraciones CMakeLists.txt, pero generan el encabezado en el directorio de compilación en lugar de en el directorio de origen.

configure_file(generator.pl generator COPYONLY) 
configure_file(schema.txt.in schema.txt COPYONLY) 
add_custom_command(
    OUTPUT generated.h 
    COMMAND ./generator schema.txt generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

¿Es posible generar el encabezado en el directorio de origen?

edición (para reflejar la respuesta):

El archivo se puede llegar directamente al calificar plenamente su camino, ya sea con

${CMAKE_CURRENT_SOURCE_DIR} 

o:

${CMAKE_CURRENT_BINARY_DIR} 

lo tanto, para generar el encabezado en mi directorio de origen, el extracto anterior de CMakeLists.txt se convierte en:

que es realmente más simple. Gracias

--a

+0

Esto es realmente una buena idea. Si puedo guardar el archivo generado en el directorio fuente, se incluye en el paquete fuente, que es exactamente lo que quiero (porque de esa manera los usuarios de mi biblioteca no necesitan generar el archivo, siempre y cuando no modifiquen el generador y/o el archivo de datos fuente.) Esto significa que más personas pueden compilar mi biblioteca. –

Respuesta

5

Creo que de cabecera generado están bien situados en el directorio binario, ya que es posible que desee crear a los directorios de construcción con la misma fuente y diferentes configuraciones resultantes en diferentes cabecera generado.

Es posible que desee incluir el directorio de construcción de su proyecto:

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
+0

Si CMake tiene problemas para encontrar su archivo, entonces califíquelos completamente con '$ {CMAKE_CURRENT_BINARY_DIR}'. Si está seguro de que desea crear sus archivos en el directorio fuente, incluso puede usar '$ {CMAKE_CURRENT_SOURCE_DIR}' en sus comandos 'configure' y' add_custom_command'. – tibur

+0

Acepto, el mejor lugar para los archivos generados se encuentra en el directorio de compilación. Este encabezado es conveniente en el directorio de origen porque proporciona una finalización útil del código mientras se codifica. Es el mismo encabezado para todas las configuraciones de compilación, por lo que tenerlo en el directorio de origen no es dañino en absoluto. NB: Tengo problemas para editar comentarios, probablemente porque estoy en una gran red detrás de una única IP. Perdón por la confusion. – amso

Cuestiones relacionadas