#macos #cmake
Вопрос:
Я создаю приложение для пакета macos, и мне нужно включить папку «Ресурсы» в папку «Ресурсы».
Прямо сейчас мне удалось скопировать отдельные файлы в эту папку, но я потерял структуру папки:
set(ASSETS ${CMAKE_SOURCE_DIR}/assets/textures/awesomeface.png)
target_sources(${PROJECT_NAME} PRIVATE ${ASSETS})
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE ON
MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${VERSION}
RESOURCE "${ASSETS}"
)
Я мог бы использовать GLOB_RECURSE, чтобы найти все файлы в папке «Ресурсы» и переместить их в ресурсы, но если я это сделаю, я потеряю структуру папок.
Как правильно это сделать?
Ответ №1:
Используйте свойство MACOSX_PACKAGE_LOCATION
исходного файла:
set(textures assets/textures/awesomeface.png ...)
target_sources(target PRIVATE ${textures})
set_source_files_properties(
${textures}
PROPERTIES
MACOSX_PACKAGE_LOCATION Resources/assets/textures
)
Что-то подобное вышесказанному должно сработать (хотя у меня нет под рукой mac, чтобы протестировать его).
Смотрите документы здесь: https://cmake.org/cmake/help/latest/prop_sf/MACOSX_PACKAGE_LOCATION.html
Комментарии:
1. Я просто хочу скопировать папку, в которой много файлов, для этого мне придется вручную просмотреть каждую папку и подпапку
2. @ellipticaldoor — я здесь всего лишь посыльный. Свойство исходного файла-это то, как вы это делаете в CMake. Вы можете сделать это менее ужасным с помощью функций и циклов управления путями CMake.
3. Я вижу, что это невозможно, в конце концов, я просто использовал пользовательскую команду для копирования папки
Ответ №2:
Простое копирование папки выполняется с помощью пользовательской команды
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_SOURCE_DIR}/assets"
"
lt;TARGET_FILE_DIR:${PROJECT_NAME}>/../Resources/assets"
)