una ubicaciones ubicacion tiempo simuladas real por permitir mandar lugar falsa estar enviar engañar detectar como xcode visual-studio cmake post-build-event

xcode - ubicaciones - Copie el archivo de destino a otra ubicación en un paso de compilación posterior en CMake



ubicacion falsa android (2)

Tengo una biblioteca dinámica que recibe un nombre diferente según la configuración, especificada en los scripts de CMake por:

set_target_properties(${name} PROPERTIES OUTPUT_NAME ${outputName}64) set_target_properties(${name} PROPERTIES DEBUG_OUTPUT_NAME ${outputName}64_d)

El resultado final es que obtengo un nombre diferente en las versiones de lanzamiento y depuración. Me gustaría copiar la biblioteca resultante en un directorio diferente como un paso posterior a la compilación, pero el regalo (?) De CMake-Fu no sonrió al tuyo de verdad.

He intentado hacer esto:

GET_TARGET_PROPERTY(origfile mylibrary LOCATION) STRING(REGEX REPLACE "/" "////" origfile ${origfile}) set(targetfile my_target_path//${CMAKE_CFG_INTDIR}//) STRING(REGEX REPLACE "/" "////" targetfile ${targetfile}) add_custom_command(TARGET mylibrary POST_BUILD COMMAND copy ${origfile} ${targetfile} )

Esto funciona bien para las versiones de lanzamiento, pero para la depuración, la fuente no incluye el _d que habría esperado. ¿Cómo obtengo la ruta de salida del destino para poder copiar el archivo?

Nota: Como se puede ver en el fragmento de código anterior, esto es actualmente para Windows / Visual Studio, pero me gustaría que esto también funcione en OS X / Xcode / make.

Nota: Necesito que la biblioteca se coloque en un directorio adicional que sirva como directorio de salida para varios otros proyectos que dependen de esta biblioteca, de modo que estos proyectos puedan cargar la biblioteca en tiempo de ejecución. Una solución alternativa que sería aceptable sería poder crear un objetivo personalizado que haga la copia, de modo que los otros proyectos puedan depender de este proyecto, que a su vez depende de la biblioteca.


En lugar de usar la propiedad obsoleta LOCATION , prefiera usar expresiones generadoras:

add_custom_command(TARGET mylibrary POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:mylibrary> ${targetfile} )

También puede simplemente generar el archivo exe en el directorio de destino directamente al establecer la propiedad de destino RUNTIME_OUTPUT_DIRECTORY lugar de copiarla. Esto tiene opciones por configuración (por ejemplo, RUNTIME_OUTPUT_DIRECTORY_DEBUG ).

set_target_properties(mylibrary PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG <debug path> RUNTIME_OUTPUT_DIRECTORY_RELEASE <release path> )

Para más detalles ejecute:

cmake --help-property "RUNTIME_OUTPUT_DIRECTORY" cmake --help-property "RUNTIME_OUTPUT_DIRECTORY_<CONFIG>"

Además, debería poder usar barras diagonales a lo largo de los separadores de ruta, incluso en Windows.


Use expresiones de generador en el comando POST_BUILD lugar de calcular manualmente la ruta de salida. Estos son conscientes de la configuración. Ejemplo:

add_custom_command(TARGET mylibrary POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "$<TARGET_FILE:mylibrary>" "my_target_path/$<CONFIGURATION>/$<TARGET_FILE_NAME:mylibrary>" COMMENT "Copying to output directory")