Как правило программы пишутся для того чтобы их впоследствии распространять. Либо в открытом доступе, либо локально (например, внутри компании).
Как сделать, чтобы пользователь мог работать с программой, написанной на Qt, на своём компьютере?
Подготовку программы на Qt к распространению можно условно разделить на два этапа:
-
Компиляция программы в «релиз»;
-
Комплектация программы необходимыми библиотеками.
Рассмотрим оба этапа применительно к Qt 5.7 с компилятором MinGW для операционной системы Windows.
Компиляция программы в «релиз»
Существуют два основных варианта компиляции приложения:
-
Отладка;
-
Выпуск («релиз»).
Отладочный вариант используется только на этапе разработки и не предназначен для распространения. Кроме того, при комплектации библиотеками для отладочного варианта последние должны иметь суффикс «d» в названии.
Поэтому программу перед распространением необходимо скомпилировать в варианте «Выпуск» («релиз»).
Выбрать нужный вариант компиляции можно непосредственно в рабочем окне QtCreator как показано на скриншоте.
После выбора варианта компиляции и её последующего запуска, программа будет скомпилирована соответствующим образом.
Комплектация библиотеками
После компиляции программы её следует обязательно укомплектовать необходимыми библиотеками.
Дело в том, что в папке со скомпилированной программой находится только исполняемый файл (exe). В таком виде программа будет работоспособна только при запуске из QtCreator, что для обычного пользователя совершенно не приемлемо (да и для самого разработчика не всегда удобно).
Конкретный перечень необходимых библиотек зависит от проекта. Ниже приведён список самых основных из них (которые требуются для запуска любого Qt приложения).
Библиотеки собственно Qt:
-
Qt5Core.dll;
-
Qt5Gui.dll;
-
Qt5Widgets.dll.
Их, а также другие библиотеки Qt можно найти в папке: папка_установки_Qt\Tools\mingw530_32\bin
Служебные библиотеки компилятора:
-
libgcc_s_dw2-1.dll;
-
libstdc++-6.dll;
-
libwinpthread-1.dll.
Их можно найти в папке: папка_установки_Qt\5.7\mingw53_32\bin
Для того чтобы укомплектовать своё приложение необходимыми библиотеками достаточно просто скопировать их в папку с исполняемым файлом.
После этого программа будет готова к распространению и можно приступать к созданию инсталлятора или просто упаковать приложение вместе со всеми библиотеками, например, в zip архив.
Обратите внимание!
Библиотеки для приложения следует копировать именно из папок mingw, а не QtCreator. В последнем случае программа будет укомплектована библиотеками, которые предназначены только для QtCreator и, как следствие, может в итоге оказаться неработоспособной.
Есть чудесная утилита которая называется windeployqt встроенная в qt, собирает все необходимые файлы для работы приложения автоматически.
Утилиты утилитами, но о ручном способе то же стоит знать.
Проблема в том, что на очевидные запросы гугл не выдаст более простое решение этой проблемы. Я вообще случайно наткнулся на инфу о этой утилите. Да и вообще, в наше время собирать релизный билд приложения, а потом еще и вручную плясать с бубном — это уже какой-то моветон.
Если Вы пишите проект с нуля у себя и у Вас полностью правильно выстроены все процессы и вся инфраструктура, то это одно. Когда Вы потом приходите с ним к заказчику или работаете с legacy это уже другое. Там Вас к сожалению никто не будет спрашивать что является моветоном, а что нет. Клиенту нужно чтобы «это» у него работало. А, всё остальное воспринимается, как личные проблемы IT и мало кого интересует. Звучит жёстко, но это жизнь. И чем больше способов заставить Ваш продукт работать у клиента Вы знаете, тем больше у Вас шансов на успех.
Здравствуйте. Подскажите как подготовить проект к выпуску, если используются сторонние библиотеки, например opencv.
Это зависит от того как эти интегрируются с системой и приложением. Если достаточно просто положить dll рядом с exe, то Вам вполне подойдут способы описанные в статье или комментарии Сергея (от 12.02.19). Если для установки библиотек используется инсталлятор, который помещает их в определённые папки и/или прописывает что-то в системе, или сами библиотеки в ней что-то прописывают, то здесь всё гораздо сложнее. Здесь лучше обращаться уже к документации либо в техподдержку или к сообществу разработчиков (для OpenSource). P.S. Пример для технологии opencv привести не могу, т.к. не работал с ней.