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}> в случае создания архива.

Другие вопросы по тегам