2011-12-26 22 views
6

tengo algo como esto en mi proyecto:posponer la toma de destino personalizada hasta instalar

add_custom_command(OUTPUT somefile) 
add_custom_target(tgt ALL DEPENDS somefile) 

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir) 

Esto funciona bien, pero mi mando se ejecuta durante make debido ALL palabra clave en add_custom_target(). Lo que quiero es hacer que CMake ejecute este comando solo cuando se emite make install, no durante la compilación.

Si elimino TODA la palabra clave, el objetivo completo no se está creando de manera predeterminada, por lo que no se produce ningún archivo y make install falla.

Respuesta

8

Una posible solución es hacer que el comando make install invoque el make tgt como efecto secundario. Esto se puede hacer mediante el uso de la firma CODE del comando install:

add_custom_command(OUTPUT somefile) 
add_custom_target(tgt DEPENDS somefile) 

install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target tgt)") 
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir) 

El execute_process invoca cmake para construir el objetivo tgt antes de instalar somefile.

Cuestiones relacionadas