Cmake Xcode добавляет расширение через новую фазу копирования файлов
Я пытаюсь построить проект Xcode 9 с помощью cmake (3.8.0). Он состоит из цели приложения и цели appex (расширения), которую необходимо скопировать в каталог PlugIns приложения через "Фазу копирования файлов" (или "Фазу расширения приложения") в Фазах сборки.
Я попробовал несколько попыток, таких как звонок set_source_files_properties(${myFile} PROPERTIES MACOSX_PACKAGE_LOCATION PlugIns)
но безуспешно.
Я считаю, что трудность (для cmake) заключается в том, что точный файл "myExtension.appex" создается во время сборки, и поэтому жесткое кодирование пути его добавления в качестве исходного файла не работает.
Любая помощь будет оценена!
1 ответ
Нам просто удалось решить это немного странным образом (и, если вы решили проблему, пусть это будет решением для кого-либо другого - такого как я - пытающегося понять это)
Когда вы встраиваете приложение в проект, Xcode в основном меняет две вещи в проекте: добавляет приложение в качестве зависимости проекта и добавляет PBXCopyFilesBuildPhase, чтобы убедиться, что скомпилированный файл.appex окажется в папке PlugIns полученного пакета.
Мы подражали этим двум шагам. Добавить зависимость к приложению легко:
add_dependencies("${_PROJECT_NAME}" ${APP_EXTENSION_TARGET})
В нашем случае ${EXTENSION} на самом деле представляет собой список со всеми имеющимися у нас расширениями, так что вы знаете, что это тоже может сработать. Это обеспечит сборку расширений перед основным приложением. Теперь, чтобы убедиться, что они размещены в нужном месте, мы добавили специальную команду POST_BUILD в приложение CMakeLists.txt, например:
add_custom_command(TARGET "${target}" POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory "${PATH_TO_APPEX}" "$<TARGET_FILE_DIR:${target}>/PlugIns/${APPEX_FILE_BASENAME}" MAIN_DEPENDENCY "${APPEX_NAME}")
Вокруг всего этого есть некоторый вспомогательный код, но в этом суть.
Надеюсь, это поможет!
Вы можете использовать $(CONFIGURATION_BUILD_DIR)/$(CONTENTS_FOLDER_PATH)
скорее, чем $<TARGET_FILE_DIR:${target}>
в случае создания архива.