2013-07-05 5 views
5

Quindi, ci sono molti modi per copiare i file (e directory) a CMake runtime (file(COPY ...), configure_file(...) e add_custom_command() tutto il lavoro *), ma non ho ancora trovato il modo di fare un file o una directory copiati dall'origine per creare la directory appaiono in un archivio generato da CPack. Ho pensato che avrei this SO answer risolvere il problema, in quanto collega in realtà la copia ad un target che poi avere una installazione è legato ad esso:Copia di file e la loro inclusione in un archivio CPack

install(TARGET mytarget DESTINATION bin) 

mentre io avevo riconosciuto che i comandi file() e configure_file() non hanno un evidente modo per essere aggiunto a un bersaglio. Ma questo non ha funzionato. Quindi, dato un semplice CMakeLists.txt, come quello qui sotto, come faccio a far apparire tutti i file (inclusa la directory exmaple) nell'archivio ?!

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) 

* non ho ancora scoperto che uno di questi 3 metodi è in realtà (la maggior parte?) Corretto - in modo da tutto il consiglio anche su questo sarà apprezzato enormemente

+0

Come funzionerebbe per un * pacchetto sorgente * piuttosto che una distribuzione binaria? Il generatore di pacchetti sorgente CPack sembra essere piuttosto limitato nella sua configurabilità. – kynan

risposta

7

Come spiegato nel documentation della Modulo CPack, i programmi di installazione binari creati da CPack contengono tutto installato tramite il comando INSTALL di CMake. Pertanto l'eseguibile mytarget nell'esempio verrà incluso nell'archivio CPack, poiché si utilizza il comando install per copiarlo nella cartella bin.

Per avere anche CPack includere la cartella example in archivio generato, è possibile utilizzare il DIRECTORY variante del install command nel seguente modo:

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

Il file(COPY ...) e configure_file(...) non hanno un effetto su ciò che è installato da CPack. Entrambi i comandi vengono in genere utilizzati per copiare i file dall'albero di origine nell'albero binario dopo aver configurato il progetto CMake.

L'utilizzo di add_custom_command con ${CMAKE_COMMAND} -E copy_directory ... rinvierà la copia effettiva dei file al momento della compilazione del progetto. Tuttavia, non innescherà l'inclusione dei file copiati nell'archivio CPack.

+0

'install (DIRECTORY ...' ha funzionato perfettamente grazie – ChrisW

Problemi correlati