Для распространения программы, написанной на Qt под Windows, кроме исполняемого файла необходимо вместе с ним предоставлять множество DLL. Раньше (до Qt 5.2) приходилось вручную искать DLL в папке Qt и размещать их рядом с исполняемым файлом. Теперь, для автоматизации этого процесса, есть программа windeployqt, которая поставляется вместе с Qt.
windeployqt — консольная программа, поэтому для ее запуска нужно воспользоваться командной строкой.
Командную строку не стоит запускать так, как это обычно делается в Windows. Qt предоставляет свой способ запуска командной строки, который позволяет вызывать консольные программы Qt без лишних телодвижений. В программах меню «Пуск» должен быть соответствующий пункт в разделе Qt. Например, для Qt 5.7.0 (MinGW 5.3.0) этот пункт называется
Qt 5.7 for Desktop (MinGW 5.3.0 32 bit)
и имеет характерную иконку командной строки.
Запуск windeployqt выглядит следующим образом:
windeployqt <путь>
где <путь> — это путь к исполняемому файлу вашей программы или папке, в которой этот файл находится.
Пример:
windeployqt C:\example\build\release\example.exe
После завершения, все файлы, требуемые для работы вашей программы, будут находиться в папке исполняемого файла.
Рекомендации
Разделение файлов сборки и рабочих файлов
По умолчанию исполняемый файл создается в папке сборки, где, кроме него, создается множество других файлов, которые необходимы для сборки, но не нужны для работы программы. А windeployqt примешает к ним файлы, которые нужны только для работы программы.
Рекомендация состоит в том, чтобы разделить файлы сборки от рабочих файлов. Для этого в файле проекта необходимо добавить строчку
DESTDIR = папка_программы
где папка_программы — это имя папки, где будет размещен исполняемый файл, отдельно от файлов сборки. После выполнения windeployqt в этой папке будут находиться только файлы необходимые для работы программы. Что облегчит их распространение или создание установщика.
Примечание: имя папки не должно содержать кириллицу.
Автоматическое развертывание
Чтобы windeployqt запускалась автоматически, можно в файл проекта *.pro добавить следующую строчку:
win32:QMAKE_POST_LINK += windeployqt $$OUT_PWD/$$DESTDIR
где $$OUT_PWD/$$DESTDIR
задает папку с исполняемым файлом. Задание папки не универсально и работает если в DESTDIR
указан относительный путь.
Спасибо, помогло