2013-03-29 15 views
11

Próbuję dostarczyć niektóre pliki "źródłowe" z niektórymi plikami wykonywalnymi. Zastanawiam się, czy istnieje sposób na skopiowanie tych plików źródłowych do katalogu budowania (z katalogu źródłowego), a następnie do katalogu instalacyjnego przy użyciu cmake.Instalowanie dodatkowych plików przy użyciu CMake

Moim bardziej szczegółowym celem jest włączenie do tego jądra OpenCL, które piszę w swoich własnych plikach * .cl.

Przykład:

mkdir build 
cd build 
cmake .. 
make 

Teraz mój katalog powinien mieć plik wykonywalny (norma cmake) i some_opencl_kernel.cl który otwieram w moim pliku wykonywalnego. TIA

Odpowiedz

12

można skopiować plik na drzewie zbudować używając add_custom_command dodając coś jak poniżej:

add_custom_command(TARGET MyExe POST_BUILD 
        COMMAND ${CMAKE_COMMAND} -E copy_if_different 
         ${CMAKE_CURRENT_SOURCE_DIR}/src/some_opencl_kernel.cl 
         $<TARGET_FILE_DIR:MyExe> 
        ) 

Dodaje to zdarzenie post-build do celu (mam nazwał go MyExe), który kopie plik src/some_opencl_kernel.cl do tego samego katalogu w drzewie kompilacji, co plik exe.

Istnieje wiele innych sposobów kopiowania pliku do drzewa kompilacji, ale podoba mi się ten, ponieważ używa "wyrażenia generatora" $<TARGET_FILE_DIR:MyExe> do identyfikacji lokalizacji katalogu exe w drzewie kompilacji. Może się to różnić w zależności od np. typu kompilacji lub platformy, więc wyrażenie generujące jest najbardziej niezawodnym, międzyplatformowym sposobem określania tego położenia, które czuję.

Jeśli chodzi o instalację, można po prostu użyć polecenia install(FILES ...). Zakładając, że do EXE masz coś podobnego

install(TARGETS MyExe RUNTIME DESTINATION bin) 

można tylko dodać:

install(FILES src/some_opencl_kernel.cl DESTINATION bin) 

który zainstaluje go ${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl obok exe.

+0

Fraser Naprawdę doceniam to, zastanawiałem się, czy masz jakieś przemyślenia na temat używania 'configure_file' z' COPYONLY'? – Constantin

+0

To też działa i jest najłatwiejszą opcją, jeśli nie kopiujesz do katalogu kompilacji, gdzie umieszczane są pliki exes/libs lub jeśli ten katalog jest naprawiony. Na przykład MSVC dołącza katalog "Debugowanie" do katalogu ['RUNTIME_OUTPUT_DIRECTORY'] (http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:RUNTIME_OUTPUT_DIRECTORY) do kompilacji debugowania. Jeśli nigdy nie użyjesz generatora wielu konfiguracji, może to nie być problemem, a "plik_konfiguracyjny" będzie prostszą opcją. – Fraser

8

Jeśli chcesz skopiować foldery drzewa z pewnego rodzaju pliki:

# Copy all assets to resources file 
    INSTALL(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/assets/ DESTINATION ${INSTALL_PATH}/assets 
      FILES_MATCHING PATTERN "*.dae" PATTERN "*.jpg") 

Jeśli chcesz skopiować wszystkie pliki w folderach, po prostu usunąć wzory FILES_MATCHING