#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
}