2011-05-25 14 views
8

Estoy tratando de copiar todos los binarios generados por cmake a un directorio específico. No quiero usar EXECUTABLE_OUTPUT_PATH, mantenerlos en el árbol de construcción facilita el desarrollo.Cmake: use add_custom_command para copiar el binario en una ubicación específica que falló cuando la ubicación no existe

así que uso add_custom_command añadir una copia posterior acumulación

# set the final binary dir 
set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/bin) 

# get name and location of binary, namecan change with os (cf. ".exe" suffix on windows) 
GET_TARGET_PROPERTY(EXAMPLE_BIN_NAME example LOCATION) 
# copy bin to binary folder 
ADD_CUSTOM_COMMAND(TARGET example 
      POST_BUILD 
      COMMAND ${CMAKE_COMMAND} -E copy ${EXAMPLE_BIN_NAME} ${PROJECT_BINARY_DIR}/. 
) 

El problema es que en la primera generación no existe la carpeta "bin" (el fallo de copia), pero la carpeta "bin" se crea justo después. Entonces, en la segunda compilación, la copia funciona.

¿Hay alguna manera de hacer que el comando personalizado cree la carpeta bin y luego copie el binario? ¿O es posible tener dos EXECUTABLE_OUTPUT_PATH con cmake?

Gracias!

+0

Ver https://stackoverflow.com/questions/6594796/how-do-i-make- cmake-output-into-a-bin-dir –

Respuesta

16

Sólo asegúrese de que la ubicación de destino "bin" existe antes de invocar el comando de copia, es decir:

ADD_CUSTOM_COMMAND(TARGET example 
      POST_BUILD 
      COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR} 
      COMMAND ${CMAKE_COMMAND} -E copy ${EXAMPLE_BIN_NAME} ${PROJECT_BINARY_DIR}/. 
) 
+0

Sí, esa fue mi solución, pero esperaba una solución mejor. Gracias de todos modos por tu respuesta! –

Cuestiones relacionadas