2016-11-19 1 views
0

Die binäre Verzeichnisstruktur meines Projekts ist derzeit wie folgt aus (Windows):CMake Post-Build-Event: Die Kopie erstellt Bibliotheken

bin/mainProject/{Debug,Release} 
bin/library1/{Debug,Release} 
bin/library2/{Debug,Release} 
... 
bin/libraryN/{Debug,Release} 

Ich möchte die Bibliotheken library1lib.dll, kopieren ... libraryNlib.dll zu das Verzeichnis bin/mainProject/{Debug,Release}, sobald sie erstellt wurden.

Für CMake, ich denke, das ist machbar ist, ein Post-Build-Ereignis verwenden, daher habe ich versucht habe, diese zu jedem der Bibliotheken 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}/ 
) 

Derzeit gibt es zwei Probleme:

  1. ${CMAKE_BUILD_TYPE} scheint nicht definiert zu sein, zumindest bekomme ich eine leere Zeichenfolge für diese Variable im Ausgabefenster.
  2. Gibt es eine Möglichkeit, das Post-Build-Ereignis generischer zu machen? Wie ersetzen Sie den tatsächlichen DLL-Namen durch eine Variable?

Antwort

0

können Sie machen diese allgemeinere von generator expressions mit:

add_custom_command(
    TARGET library1 
    POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy 
     $<TARGET_FILE:library1> 
     $<TARGET_FILE_DIR:mainProject>/$<TARGET_FILE_NAME:library1> 
) 

Alternative

Sie könnten - wenn jede Abhängigkeit Projekt CMake bauen innerhalb ist - auch nur einen gemeinsamen Ausgangspfad geben für alle ausführbaren Dateien und DLLs mit etwas wie:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Out") 

Hinweis: Der absolute Pfad ist hier erforderlich, da er ansonsten relativ zum Standardausgabepfad jedes Ziels sein würde. Beachten Sie, dass das Unterverzeichnis der Konfiguration automatisch von CMake angehängt wird.

Referenzen

Verwandte Themen