Развертывание Qt-приложений в Windows

Для распространения программы, написанной на 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 указан относительный путь.

Ссылки

Описание windeployqt на официальном сайте.

Реклама