2013-07-05 13 views
5

So gibt es zahlreiche Möglichkeiten, um Dateien (und Verzeichnisse) auf CMake Laufzeit zu kopieren (file(COPY ...), configure_file(...) und add_custom_command() alle Arbeit *), aber ich habe noch nicht herausgefunden, wie man Eine Datei oder ein Verzeichnis, das vom Verzeichnis "Quelle zum Erstellen" kopiert wurde, wird in einem von CPack generierten Archiv angezeigt. Ich dachte, dass this SO answer würde es beheben, wie sie tatsächlich das Kopieren auf eine Ziel verknüpft, die dann mit ihm verbunden eine Installation haben:Dateien kopieren und sie in einem CPack Archiv einschließlich

install(TARGET mytarget DESTINATION bin) 

während ich erkannte, dass die file() und configure_file() Befehle haben keine offensichtliche Möglichkeit, einem Ziel hinzugefügt zu werden. Aber das hat nicht funktioniert. Also, mit einer einfachen CMakeLists.txt, wie die unten, wie mache ich alle Dateien (einschließlich der exmaple Verzeichnis) im Archiv erscheinen ?!

cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 
enable_language(FORTRAN) 
add_executable(mytarget ${PROJECT_SOURCE_DIR}/myprog.for) 
install(TARGETS mytarget DESTINATION bin) 

add_custom_command(TARGET mytarget PREBUILD 
       COMMAND ${CMAKE_COMMAND} -E copy_directory 
        ${PROJECT_SOURCE_DIR}/examplefiles ${PROJECT_BINARY_DIR}/examplefiles) 

set(CPACK_GENERATOR "TGZ") 
include(CPack) 

* Ich habe noch aus nicht gefunden, welche dieser drei Methoden tatsächlich ist (die meisten?) Richtig - so eine Beratung zu diesem Thema wird auch enorm

+0

Wie würde dies für ein * Quellpaket * und nicht für eine Binärdistribution funktionieren? Der CPack-Quellpaketgenerator scheint in seiner Konfigurierbarkeit ziemlich begrenzt zu sein. – kynan

Antwort

7

Wie zu erkennen ist, erklärte in der documentation der CPack-Modul, die von CPack erstellten Binär-Installer enthalten alles, was über CMakes INSTALL-Befehl installiert wurde. Daher wird die ausführbare Datei mytarget in Ihrem Beispiel in das CPack-Archiv aufgenommen, weil Sie sie mit dem Befehl install in den Ordner bin kopieren.

Um auch CPack gehören die example Ordner im generierten Archiv haben, können Sie die DIRECTORY Variante des install command auf folgende Weise verwenden:

install(DIRECTORY "${PROJECT_SOURCE_DIR}/examplefiles/" DESTINATION "example") 

Die file(COPY ...) und configure_file(...) keinen Einfluss auf das, was ist installiert von CPack. Beide Befehle werden normalerweise verwendet, um beim Konfigurieren des CMake-Projekts Dateien aus dem Quellbaum in den Binärbaum zu kopieren.

Die Verwendung von add_custom_command mit ${CMAKE_COMMAND} -E copy_directory ... verschiebt das tatsächliche Kopieren von Dateien auf die Erstellungszeit des Projekts. Es wird jedoch auch nicht die Aufnahme der kopierten Dateien in das CPack-Archiv auslösen.

+0

'installieren (VERZEICHNIS ...' funktionierte perfekt dank – ChrisW

Verwandte Themen