versiones guia español descargar actualizar cmake

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:

  1. ${CMAKE_BUILD_TYPE} parece no estar definido, al menos ${CMAKE_BUILD_TYPE} una cadena vacía para esa variable en la ventana de salida.
  2. ¿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