2013-07-05 8 views
5

Tak, istnieje wiele sposobów, aby skopiować pliki (i katalogi) w CMake starcie (file(COPY ...), configure_file(...) i add_custom_command() wszystkie prace *), ale jeszcze nie dowiedział się, jak zrobić plik lub katalog skopiowany ze źródła do katalogu kompilacji pojawi się w archiwum wygenerowanym przez CPack. I mimo że this SO answer by to naprawić, gdyż faktycznie łączy kopiowanie do celu, które będą wtedy miały instalacja związana z nim:Kopiowanie plików i włączenie ich w archiwum CPack

install(TARGET mytarget DESTINATION bin) 

natomiast ja nie uznają, że file() i configure_file() polecenia nie mają oczywisty sposób dodania do celu. Ale to nie zadziałało. Tak więc, biorąc pod uwagę prosty CMakeLists.txt, taki jak ten poniżej, w jaki sposób mogę zrobić wszystkie pliki (w tym katalog exmaple) w archiwum ?!

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) 

* jeszcze nie dowiedział się, który z tych 3 metod jest rzeczywiście (większość?) Poprawne - więc każda rada na to też będzie niezwykle ceniona

+0

Jak by to działało dla * pakietu źródłowego * zamiast dystrybucji binarnej? Generator pakietów źródłowych CPack wydaje się być raczej ograniczony pod względem możliwości konfiguracji. – kynan

Odpowiedz

7

jak wyjaśniono w documentation z Moduł CPack, binarne instalatory stworzone przez CPack zawierają wszystko, co zostało zainstalowane za pomocą polecenia CMake'a INSTALL. W związku z tym plik wykonywalny mytarget w twoim przykładzie zostanie dołączony do archiwum CPack, ponieważ używasz polecenia install, aby skopiować go do folderu bin.

Aby mieć CPack to folder, w wygenerowanym archiwum example, można skorzystać z wariantu install commandDIRECTORY w następujący sposób:

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

file(COPY ...) i configure_file(...) nie mają wpływu na to, co jest zainstalowane przez CPack. Obie komendy są zwykle używane do kopiowania plików z drzewa źródłowego do drzewa binarnego po skonfigurowaniu projektu CMake.

Korzystanie z z ${CMAKE_COMMAND} -E copy_directory ... spowoduje odłożenie faktycznego kopiowania plików na czas kompilacji projektu. Nie spowoduje to jednak włączenia kopiowanych plików do archiwum CPack.

+0

'install (DIRECTORY ...' działało doskonale dzięki – ChrisW

Powiązane problemy