Как скопировать / обновить ресурсы, фреймворки или плагины в (Mac OS X) «app bundle» с помощью Qt Creator или qmake

#qt #deployment #bundle #qt-creator #qmake

#qt #развертывание #пакет #qt-creator #qmake

Вопрос:

Я пару дней читал о том, как копировать / обновлять внешние ресурсы, плагины или фреймворки в пакет Mac моего приложения с помощью Qt creator или qmake.

Прямо сейчас я нашел два основных решения. Один из них — использовать qmake вместе с некоторыми командами в файле «.pro». Другой вариант — выполнить сценарий «Пользовательского шага развертывания».

Я надеялся использовать второй вариант, потому что у меня уже был небольшой скрипт make, который делал то, что я хотел. Проблема в том, что Qt Creator предлагает так мало переменных для работы, что скрипт потерял свою полезность. Например, мой скрипт использует «Путь к целевому приложению» в качестве параметра, чтобы он мог выполнять всю свою работу оттуда. Но, пожалуйста, поправьте меня, если я ошибаюсь, Qt Creator предлагает только переменные %{buildDir} и %{SourceDir}…

Другой вариант — использовать qmake. Это то, что я уже пробовал в своем файле «.pro»:

1) С помощью команды INSTALL. Я провел небольшой тест, в котором попытался скопировать некоторые файлы таким образом:

 MediaFiles.path = test/media
MediaFiles.files = media/*
INSTALL  = MediaFiles
  

И в принципе ничего не произошло. Я пытался найти ту же папку «media» в папке «test», но ничего. Не знаю, делаю ли я что-то не так.

Пожалуйста, обратите внимание, что папка «media» находится рядом с папкой «test» и файлом «.pro». (Все они имеют одинаковую иерархическую позицию.)

2) Затем я попробовал QMAKE_BUNDLE_DATA:

 MediaFiles.path = Contents/MacOS
MediaFiles.files = media/*
QMAKE_BUNDLE_DATA  = MediaFiles
  

Но это дало мне следующую ошибку:

 usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
make: *** [PathToApp] Error 64
  

Пока ни одно из решений не кажется приятным. Если бы я хотел создать хороший пользовательский скрипт make, мне нужно будет жестко закодировать каждый целевой путь отдельно. В моем случае у меня есть 8 разных целевых путей в зависимости от некоторых переменных «CONFIG».

Я уверен, что решение qmake является официальным способом сделать это. Если кто-нибудь может указать мне на решение ошибки 64, было бы здорово.

Еще один вопрос: должен ли я выполнять qmake каждый раз, когда я хочу обновить свой пакет? Могу ли я выполнить свой сценарий make с помощью qmake?

Ответ №1:

QMAKE_BUNDLE_DATA начал работать безупречно после ввода команды в конец скрипта .pro.

 mac{
    MediaFiles.files = media
    MediaFiles.path = Contents/MacOS
    QMAKE_BUNDLE_DATA  = MediaFiles
}