Tworzę mały program, który wymaga pliku obrazu foo.bmp do uruchomienia
, więc mogę skompilować program, ale aby go uruchomić, muszę skopiować foo.bmp do "kompilacji" "podkatalogu ręcznie jakiego polecenia powinienem użyć w CMakeLists.txt, aby automatycznie dodać foo.bmp do kompilacji podkatalogu podczas kompilacji programu?CMake: dodawanie własnych zasobów do budowania katalogu
Odpowiedz
Aby to zrobić, należy użyć polecenia add_custom_command, aby wygenerować reguły kompilacji dla potrzebnych plików w katalogu budowania. Następnie dodaj zależności od celów do tych plików: CMake buduje tylko coś, co jest potrzebne dla celu.
Powinieneś także upewnić się, że kopiujesz tylko pliki, jeśli nie budujesz z katalogu źródłowego.
coś takiego:
project(foo)
cmake_minimum_required(VERSION 2.8)
# we don't want to copy if we're building in the source dir
if (NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
# list of files for which we add a copy rule
set(data_SHADOW yourimg.png)
foreach(item IN LISTS data_SHADOW)
message(STATUS ${item})
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${item}"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${item}" "${CMAKE_CURRENT_BINARY_DIR}/${item}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${item}"
)
endforeach()
endif()
# files are only copied if a target depends on them
add_custom_target(data-target ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/yourimg.png")
W tym przypadku używam „all” niestandardowy cel z zależnością pliku yourimg.png zmusić kopię, ale można również dodać zależność od jednego Twoich obecnych celów.
Jeśli mogłoby to pomóc, spróbowałem innego rozwiązania, używając polecenia file. Istnieje opcja COPY, która po prostu kopiuje plik lub katalog ze źródła do dest.
Jak to: FILE(COPY yourImg.png DESTINATION "${CMAKE_BINARY_DIR}")
względna ścieżka działa również dla odbiorcy (. Można po prostu użyć na przykład)
odniesienia Doc: https://cmake.org/cmake/help/v3.0/command/file.html
- 1. SearchManager - dodawanie własnych sugestii
- 2. Dodawanie własnych reguł Lint
- 3. Dodawanie plików do source_group w CMake
- 4. Dodawanie plików zasobów do xcode
- 5. Uzyskiwanie cmake do budowania ze źródła bez pakowania skryptów?
- 6. Dodawanie katalogu do tomcat classpath
- 7. Dodawanie katalogu do $ LOAD_PATH (Ruby)
- 8. Dodawanie niestandardowego katalogu do PYTHONPATH
- 9. dodawanie katalogu do sys.path/PYTHONPATH
- 10. CMake: Dodawanie aranżacji linii poleceń do projektu
- 11. Dynamiczne dodawanie ciągów zasobów
- 12. Użyj własnych plików .java projektu jako plików zasobów
- 13. Znajdowanie katalogu Pythona dla witryn z CMake
- 14. kopiowanie katalogu z zasobów do folderu danych
- 15. cmake, add_custom_command z zależnościami z innego katalogu
- 16. Dodawanie katalogu do PATH w systemie Ubuntu
- 17. Dodawanie struktury katalogu do SVN Repo
- 18. Dodawanie katalogu do nagłówków w Makefile
- 19. Pliki zasobów CMake i Visual Studio
- 20. Instalowanie dodatkowych plików przy użyciu CMake
- 21. Jak dołączyć wszystkie pliki do katalogu za pomocą cmake?
- 22. Dodawanie plików danych do projektów generowanych przez cmake
- 23. Dodawanie zależności tylko nagłówka z CMake
- 24. dodawanie katalogu ~/bin na ścieżce
- 25. Dodawanie LLVM do mojego projektu Cmake: Dlaczego istnieją stałe ścieżki w pliku Cmake LLVM?
- 26. Uzyskaj nazwę folderu z katalogu zasobów
- 27. Skopiuj plik do katalogu zasobów aplikacji, jeśli wybrano konfigurację debugowania
- 28. Odwoływanie się do obrazu w folderze w katalogu zasobów
- 29. Dodawanie i pobieranie zasobów osadzonych kodedia
- 30. Dodawanie słowników zasobów do biblioteki kontroli użytkownika w wpf
co robi add_custom_target linię robi. Próbowałem zmodyfikować twój kod i zawrzeć pętlę foreach dla linii add_custom_target, ale to nie powiedzie się na wielu plikach – Archit
Tak, domyślam się, że masz problem z zależnościami ... jak powiedziałem, tylko pliki potrzebne do celów są zbudowane. Więc jeśli nie ma celu zależnego od twoich obrazów, nie zostaną one zbudowane. Dlatego dodaję "add_custom_target" w moim przykładzie. Lepszą regułą może być 'add_custom_target (data-target ALL DEPENDS $ {data_SHADOW}), więc zawsze zależy to od wszystkich obrazów. – Guillaume