2011-03-11 9 views
7

Me gustaría hacer algo como add_custom_command, con el nombre del archivo de salida como objetivo en el archivo MAKE generado. ¿Hay una forma elegante de haciendo esto?agregando un comando personalizado con el nombre de archivo como un destino

Todos los ejemplos que he visto (como the cmake faq re: latex) usan add_custom_command para indicar cómo generar el archivo de salida deseado, y luego add_custom_target para crear un objetivo. ej .:

add_executable (hello hello.c) 
add_custom_command(OUTPUT hello.bin 
        COMMAND objcopy --output-format=binary hello hello.bin 
        DEPENDS hello 
        COMMENT "objcopying hello to hello.bin") 
add_custom_target(bin ALL DEPENDS hello.bin) 

Sin embargo, el nombre de destino en el makefile generado es entonces bin en lugar que hello.bin. ¿Hay alguna manera de hacer que hello.bin sea un objetivo en el archivo MAKE generado?

Algunas soluciones que he probado que no funcionan:

  • cambiar a: add_custom_target(hello.bin ALL DEPENDS hello.bin) resultados en una dependencia circular en el makefile.

Respuesta

3

Puede hacerlo generando su hello.bin como efecto secundario de un objetivo. En lugar de generar hello.bin desde objcopy, generas hello.tmp. Luego, como efecto secundario, también copia hello.tmp a hello.bin. Finalmente, crea el objetivo falso hello.bin que depende de su hello.tmp. En el código:

add_executable (hello hello.c) 
add_custom_command(OUTPUT hello.tmp 
        COMMAND objcopy --output-format=binary hello hello.tmp 
        COMMAND ${CMAKE_COMMAND} -E copy hello.tmp hello.bin 
        DEPENDS hello 
        COMMENT "objcopying hello to hello.bin") 
add_custom_target(hello.bin ALL DEPENDS hello.tmp) 

El problema es que hello.bin no se limpia cuando se ejecuta limpio. Para que funcione, agregue:

set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES hello.bin) 
Cuestiones relacionadas