cmake - guia - qgis manual
CMake post-build-event: copia las librerías compiladas (1)
La estructura de directorios binarios de mi proyecto es actualmente así (Windows):
bin/mainProject/{Debug,Release}
bin/library1/{Debug,Release}
bin/library2/{Debug,Release}
...
bin/libraryN/{Debug,Release}
Me gustaría copiar las bibliotecas library1lib.dll
, ... libraryNlib.dll
al libraryNlib.dll
bin/mainProject/{Debug,Release}
una vez que se bin/mainProject/{Debug,Release}
.
Para CMake, creo que esto es factible usando un evento posterior a la compilación, por lo tanto, he intentado agregar esto a cada una de las bibliotecas '' CMakeLists.txt
:
add_custom_command(TARGET library1 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/library1lib.dll
${CMAKE_BINARY_DIR}/mainProject/${CMAKE_BUILD_TYPE}/
)
Actualmente, hay dos problemas:
-
${CMAKE_BUILD_TYPE}
parece no estar definido, al menos${CMAKE_BUILD_TYPE}
una cadena vacía para esa variable en la ventana de salida. - ¿Existe la posibilidad de que el evento post-construcción sea más genérico? ¿Como reemplazar el nombre real dll con alguna variable?
Puede hacer que esto sea más genérico utilizando expresiones de generador :
add_custom_command(
TARGET library1
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:library1>
$<TARGET_FILE_DIR:mainProject>/$<TARGET_FILE_NAME:library1>
)
Alternativa
Podría - si cada dependencia está construida dentro de su proyecto CMake - también proporcionar una ruta de salida común para todos los ejecutables y archivos DLL con algo como:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Out")
Nota: Aquí se requiere la ruta absoluta porque de lo contrario sería relativa a la ruta de salida predeterminada de cada objetivo. Y tenga en cuenta que el subdirectorio de la configuración se adjunta por CMake automáticamente.
Referencias