Знаниями нужно делится...

Статическая сборка проекта Qt 5 под Windows.

Назад к списку | Просмотров: 17859

Qt 5 является отличным инструментом разработки приложений на языке C++. Отдельных похвал заслуживает IDE редактор Qt Creator.  И все бы замечательно, пока время не приходит к публикации проекта.


Полученный файл *.exe при публикации будет запускается на вашем компьютере только в том случаи, если у вас установлены библиотеки Qt в /system32 или в корень исполняемого файла. Если что эти библиотеки можно скачать с официального сайта Qt.
Но очевидно, что для проекта в несколько килобайт, ставить библиотеку в 40-50 мегабайт слишком не рачительно. Поэтому есть вариант статической сборки. Хотя тут вы теряете право использование своей программы в коммерческих целях, если конечно вы не купили платную версию (более подробно читайте лицензионное соглашение).   


Но ближе к делу. Для начала вам потребуется установить ряд дистрибутивов: perl, ruby, python.  

Тепер сборка, в папке  {ваш путь}/Qt/5.0.2/5.0.2/Src располагается исходный код компилятора Qt. Наша задача собрать его таким образом, что бы он «подхватывал» библиотеки Qt статически. Сделать это очень просто.  Создайте папку {ваш путь}/Qt/5.0.2/5.0.2/static, разместите туда батник (файл с расширением *.bat) и пропишите в него следующее:

:: Create dir structure
:: MinGW was installed separately.
::Не забудьте указать свои пути!
set QTDIR=C:/Qt/Qt5.0.2/5.0.2/Src/qtbase
set PATH=%PATH%;c:/MinGW/bin;c:/Qt/Qt5.0.2/Tools/QtCreator/bin;C:/Qt/Qt5.0.2/5.0.2/mingw47_32/bin;C:/Qt/Qt5.0.2/Tools/MinGWin;C:/Qt/Qt5.0.2/5.0.2/Srcqtbase/bin
set QMAKESPEC=win32-g++
:: Об этой строке чуть ниже!
::set LIB = %LIB%;"C:/dev/SQLXML/4.0/bin"
call %~dp0../Src/qtbase/configure.bat -prefix %CD% -platform %QMAKESPEC% -confirm-license -debug-and-release -opensource -opengl desktop -static      
echo QMAKE_LFLAGS += -static -static-libgcc >>.mkspecs/%QMAKESPEC%/qmake.conf       
:: Build with parallel compilation.
jom.exe -J 50  
pause    

По идее все должно сработать нормально. Но может случиться так, что будет вызвана ошибка из-за пути C:/Program Files (x86)/SQLXML 4.0/bin. Причина в пробельном символе. Лично я вылечил эту проблему переопределением пути (set LIB = %LIB%;"C:/dev/SQLXML4.0/bin"). Просто создайте папку без пробелов (я сделал dev) в любом месте и скопируйте туда, то, что у вас в C:/Program Files (x86)/SQLXML 4.0/bin.


Теперь сам процесс компиляции. Скажу сразу, прикрутить Qt Creator не получится, причина  в лицензионном соглашении (разумеется, разрабатываеть свой проект вы можете по-прежнему в IDE). Создаем батник следующего порядка:

:: Не забудьте указать свои пути!
set QTDIR=C:/Qt/Qt5.0.2/5.0.2/Src/qtbase
set PATH=%PATH%;c:/MinGWin;c:/Qt/Qt5.0.2/Tools/QtCreator/bin;C:/Qt/Qt5.0.2/5.0.2/mingw47_32/bin;C:/Qt/Qt5.0.2/Tools/MinGW/bin;C:/Qt/Qt5.0.2/5.0.2/Src/qtbase/bin;C:/Users/v.raskin/Desktop/trash/T60/T60
::Компилируем проект
C:/Qt/Qt5.0.2/5.0.2/5-static/bin/qmake.exe C:/Users/v.raskin/Desktop/trash/T60/T60/T60.pro  -r -spec win32-g++
C:/Qt/Qt5.0.2/Tools/MinGW/bin/mingw32-make.exe -w
Pause


Перед запуском батника добавьте в файл проекта (*.pro) следующе строки:

CONFIG += release
CONFIG += static

QMAKE_LFLAGS += -static -static-libgcc
LIBS += -static-libgcc

Теперь, запускайте компиляцию через бат файл. В результате, должны получится папки release и debug с exe файлом программы.
Собственно это все. Желаю удачи.  


автор Admin дата 05/08/2013


Оставить комментарий
7 + 6 =
Anatoly 18.09.2014 15:02

"Для начала вам потребуется установить ряд дистрибутивов: perl, ruby, python. "
А BASIC, FORTRAN, PASCAL, LUA, FORTH не надо?

Алексей 28.01.2016 10:13

О-о, спасибо за инструкцию! В оригинале (на doc.qt.io) не было ни слова про QTDIR, и у меня MSVC не находил сгенерированный на шаге configure qconfig.h