
Официальный способ установки готовых бинарников Qt — через онлайн инсталлятор. Однако он требует обязательной регистрации. Да еще и недоступен на территории РФ. Есть и другие способы получить бинарники, или собрать с компилятором от Microsoft, однако не всегда эти способы приемлемы. Сборка из исходников под Windows может оказаться несколько нетривиальна для новичков, потому сделал небольшую инструкцию по сборке Qt 5 и Qt 6. А так же рассмотрена базовая настройка QT Creator.
Зачем Qt 5? Официальная поддержка Qt 5 закончилась неделю назад. В основном для поддержки (относительно) старых систем. Qt 6 больше не поддерживает 32-хразрядные ОС, не поддерживает Windows старше Windows 10 1809, и старые Linux которые все еще имеют расширенную коммерческую поддержку (Ubuntu 20.04 например). Qt 5 поддерживает Windows 7. Qt 5.6.3 — последняя официально поддерживающая Windows XP (его рассмотрим вскользь). Тем не менее, Qt 6, например, поддерживает Windows на Arm64, так что и он точно нужен.
Почему MinGW а не компилятор от Microsoft? В основном — из-за лицензии. Компилятор от Microsoft не является полностью свободным, и его нельзя использовать если нет лицензии на Visual Studio. Лицензия Community Edition — это тоже лицензия, но ее может использовать не каждый. Если годовая выручка (не прибыль) компании больше миллиона долларов за год, то использовать Community Edition нельзя! У MinGW есть и свои недостатки (например, WebEngine на нем не собирается), но это хороший компилятор.
Подготовка
Начнем. Сначала определимся что нужно в итоге получить. Нужна рабочая среда для создания приложений на Qt с поддержкой OpenSSL под Windows + документация + примеры. Процесс сборки тестировал на Windows 10 и Windows 11.
Начнем с Qt5, он более заморочный. Для сборки нужно свободное место. Компиляция Release сборки Qt 5.15.17 (последняя версия) требует чуть больше 8 Гб свободного места, потому я использовал RAM-диск чтоб не изнашивать SSD в ходе множества экспериментов. Ведь там больше трехсот тысяч файлов!
Для RAM-диска использовал ImDisk — создал диск R: объемом 12 Гб (наверное, хватило бы и 10). Сам Qt можно скачать из множества зеркал. В статье я использую https://qt-mirror.dannhauer.de/
-
Качаем Qt 5.15.17.
-
Компилятор. Для Qt 5 точно подходит MinGW 8.1. С более новыми сборка неуспешна. Самих вариантов сборок MinGW есть несколько (MSVCRT или UCRT, POSIX threads или MCF threads или WIN32 threads, SJLJ или SEH или DWARF). И не все успешно собирают Qt. Предлагаю не заморачиваться и скачать с зеркала: х32 и х64.
-
Еще (вроде бы) нужен Python 3. Качаем и ставим свежую версию, прописываем его в PATH. Думаю вы знаете как это делается.
-
Для сборки документации нужен CLang, но не всякий, а как-то хитро собранный. Скачаем с зеркала. Более того, версия новее чем 8.0 ломает процесс сборки. Да, Qt очень капризный. Берем 8.0: х32 и х64.
-
Чтобы работать с HTTPS (и не только) нужно подключить OpenSSL 3.0. Его сборка из исходников — тоже задачка нетривиальная. Скачаем готовое. Вот список всяких сборок. Проверена (и далее рассматривается) сборка от FireDaemon.
-
QT Creator. Для Qt5 самая свежая подходящая версия — QT Creator 13. В более новых не работает нормально отладка в QT 5. Качаем собранную версию с GitHub.
-
CMake. Для сборки Qt5 он не нужен, но пригодится для сборки проектов на его основе. К тому же он нужен для сборки Qt6. Сейчас уже есть версия 4, но с ней у меня были проблемы совместимости с другими проектами. Лучше поставим последнюю версию из ветки 3.
-
Также качаем, распаковываем куда-нибудь и прописываем в PATH Ninja.
Распаковка
Если не используете RAM-диск то замените везде R: на C:. Если хотите другие пути — сами везде меняйте в командах и скриптах.
Создадим структуру папок:
C:\Qt C:\Qt\Tools C:\Qt\5.15.17 C:\Qt\5.15.17\mingw81_32 C:\Qt\5.15.17\mingw81_64 R:\Qt R:\Qt\5.15.17
-
Распаковываем компиляторы в C:\Qt\Tools. Будут подпапки mingw32 и mingw64. Переименуем их соответственно в mingw32_810 и mingw64_810. Полезно для разных версий компиляторов с разными Qt. В PATH их прописывать НЕ НАДО.
-
OpenSSL тоже распаковываем в C:\Qt\Tools. Создаст подпапку openssl-3.0.
-
Исходники Qt5 распаковал в R:\Qt\5.15.17. Создаст qt-everywhere-src-5.15.17. Переименовал в Src.
-
libclang распаковываем в C:\Qt\Tools, переименовываем в libclang_80_x32 и libclang_80_x64 для 32 и 64 битных версий соответственно.
-
Qt Creator я распаковал в C:\Qt. Создаст QtCreator13. Возможно После распаковки понадобится скопировать из папки c:\Qt\QtCreator13\bin\ в папку c:\Qt\QtCreator13\bin\clang\bin\ файлы libstdc++-6.dll , libwinpthread-1.dll , libgcc_s_seh-1.dll. А может и не понадобится, но в каком-то случае у меня Creator ругался что clangd не видит этих библиотек. Можно ярлычок от qtcreator.exe из папки c:\Qt\QtCreator13\bin\ себе куда-то бросить.
-
Так же нужно проверить что в путях (PATH) НЕТ sh.exe. Он, например, есть в Git и некоторых вариантах сборок MinGW (w64devkit например). Его наличие ломает процесс сборки.
Сборка
В этом примере собирать буду свободную версию, LGPL, без GPL библиотек, ибо их лицензия заразна, и их включение в проект по ошибке грозит лицензионными проблемами.
Для удобства создадим файл conf_qt5_x32.bat в папке R:\Qt\5.15.17\Src следующего содержания:
MD R:\temp SET TEMP=R:\temp SET TMP=R:\temp SET _ROOT=%cd% SET _DST=C:/Qt/5.15.17/mingw81_32 SET PATH=c:\Qt\Tools\mingw32_810\bin;%PATH% SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% set OPENSSL_ROOT_DIR=C:/Qt/Tools/openssl-3.0/x86 set OPENSSL_LIBDIR=C:/Qt/Tools/openssl-3.0/x86/lib set OPENSSL_INCDIR=C:/Qt/Tools/openssl-3.0/x86/include call configure.bat -shared -release -platform win32-g++^ -opensource -confirm-license -prefix %_DST%^ -docdir %_DST%/doc^ -examplesdir %_DST%/examples^ -I %OPENSSL_INCDIR% -L %OPENSSL_LIBDIR%^ -opengl desktop -no-feature-d3d12^ -no-avx -no-avx2 -no-avx512 -no-sse4.2 -no-sse4.1 -no-ssse3^ -c++std c++1z^ -nomake tests^ -skip qtcharts,qtdatavis3d,qtvirtualkeyboard,qtnetworkauth^ -skip qtlottie,qtquicktimeline,qtquick3d,qtwebglplugin^ -skip qtwayland -skip qtwebengine
Обратите внимание, что использован обратный слэш для переменной PATH и прямой в остальных случаях.
Если вам не нужны примеры то добавьте -nomake examples в последнюю строку. Если хотите собрать с GPL библиотеками, то уберите две предпоследние строчки (где -skip qtcharts и -skip qtlottie). Для себя я решил их вообще не собирать, т.к. случайное включение даже одной из этих библиотек «заразит» GPL лицензией весь проект!
Немного описания
-
Параметр -shared значит что собираем динамические библиотеки. Это важное условие LGPL лицензии. Если вам нужна статическая линковка, то или проект должен быть под лицензией GPL, или нужно покупать коммерческую лицензию Qt.
-
Параметр -release значит что библиотека соберется в релиз-версии (спасибо, Кэп!). Если нужно отлаживать саму библиотеку Qt то можно сделать отладочную сборку (-debug) или двойную (-debug-and-release), тогда каждой релиз-версии DLL будет соответствовать отладочная DLL с дополнительной буквой «d» в конце имени. Но документация собирается только в релиз-версии! Для отладочной версии нужно минимум 23 Гб свободного места.
-
Параметр -platform win32-g++ помогает явно указать что мы хотим собирать через GCC (MinGw). Это может помочь в некоторых случаях избежать конфликтов компиляторов.
-
opensource значит что нет у нас купленной лицензии и собираем свободный вариант.
-
Чтоб не нужно было интерактивно соглашаться с лицензией добавлен параметр -confirm-license.
-
Параметр -prefix %_DST% указывает путь куда будет установлен Qt. При переносе на другие компы собранной библиотеки нужно переносить в тот же путь. Это не относится к программам, которые Вы создаете с Qt.
-
По умолчанию конфигурируется на работу с библиотекой ANGLE, что сломает процесс сборки если её нет, потому добавляем параметр -opengl desktop. Ну и -no-feature-d3d12 так же нужно для MinGW.
-
Наверняка программы будут создаваться не только для машины на которой собрана библиотека Qt, потому отключаем использование некоторых процессорных инструкций, которых может не быть у пользователя: -no-avx -no-avx2 -no-avx512 -no-sse4.2 -no-sse4.1 -no-ssse3
-
И будем использовать стандарт C++17: -c++std c++1z
-
Да и тесты библиотеки нам наверняка не нужны: -nomake tests
Дополнительно о параметрах можно почитать выполнив в папке Src команду configure —help. Так же много полезной информации есть в \qtdoc\doc\src\platforms\windows.qdoc
Запустите CMD и перейдите в папку с исходниками (cd /d R:\Qt\5.15.17\Src), запустите conf_qt5_x32.bat.
Должно сконфигурироваться. Проверьте подключился ли OpenSSL (OpenSSL ………………………….. yes), есть ли документация (QDoc …………………………….. yes), нет ли в конце сообщения что документация не будет собрана. Если что-то не так и нужно переконфигурировать, то удаляем .qmake.* и config.* из папки Src. Затем можно конфигурировать снова.
Собираем. Я использовал 9 потоков ( -j9 ), Вам может больше подойдет другое число:
mingw32-make -j9
Сборка длится долго (зависит от машины, от получаса до нескольких часов). Убеждаемся что сборка прошла без ошибок. Эта команда должна показать ноль:
echo %errorlevel%
Если были ошибки, то перед новой попыткой можно конечно сделать mingw32-make clean, но это выполнятся так долго, что значительно быстрее форматировать RAM-диск (или удалить папку Src если Вы не использовали RAM-диск) и распаковать заново.
Если же собралось хорошо, то устанавливаем:
mingw32-make -j9 install
Выполняется долго. Убедимся что всё успешно. Должны получить ноль:
echo %errorlevel%
Теперь собираем документацию:
SET PATH=c:\Qt\Tools\libclang_80_x32\bin;%PATH% mingw32-make -j9 docs
И устанавливаем документацию:
mingw32-make -j9 install_docs
Готово! После всего можно добавить пару штрихов для удобства. Из папки c:\Qt\Tools\mingw32_810\bin (или где там Ваш компилятор) копируем в c:\Qt\5.15.17\mingw81_32\bin эти файлы: libwinpthread-1.dll, libstdc++-6.dll, libgcc_s_dw2-1.dll. Эти файлы нужны будут во всяком приложении на Qt которое Вы будете собирать на этой библиотеке. Теперь можно запускать из папки c:\Qt\5.15.17\mingw81_32\bin приложения, такие как assistant, designer или linguist. Приложение assistant должно сразу подтянуть документацию. В эту же папку можно скопировать libcrypto-3.dll и libssl-3.dll из c:\Qt\Tools\openssl-3.0\x86\bin. Это позволит без проблем запускать примеры программ, использующих HTTPS.
Qt 5 x64
Теперь бы еще 64х собрать. Закрываем CMD (так как там прописались пути для х32). Форматируем RAM-диск или удаляем Src и распаковываем исходники опять туда же. Это реально быстрее чем mingw32-make clean. Создадим файл conf_qt5_x64.bat в папке R:\Qt\5.15.17\Src следующего содержания:
MD R:\temp SET TEMP=R:\temp SET TMP=R:\temp SET _ROOT=%cd% SET _DST=C:/Qt/5.15.17/mingw81_64 SET PATH=c:\Qt\Tools\mingw64_810\bin;%PATH% SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% set OPENSSL_ROOT_DIR=C:/Qt/Tools/openssl-3.0/x64 set OPENSSL_LIBDIR=C:/Qt/Tools/openssl-3.0/x64/lib set OPENSSL_INCDIR=C:/Qt/Tools/openssl-3.0/x64/include call configure.bat -shared -release -platform win32-g++^ -opensource -confirm-license -prefix %_DST%^ -docdir %_DST%/doc^ -examplesdir %_DST%/examples^ -I %OPENSSL_INCDIR% -L %OPENSSL_LIBDIR%^ -opengl desktop -no-feature-d3d12^ -no-avx -no-avx2 -no-avx512 -no-sse4.2 -no-sse4.1 -no-ssse3^ -c++std c++1z^ -nomake tests^ -skip qtcharts,qtdatavis3d,qtvirtualkeyboard,qtnetworkauth^ -skip qtlottie,qtquicktimeline,qtquick3d,qtwebglplugin^ -skip qtwayland -skip qtwebengine
Всё то же самое, только пути все для х64. Остальные команды те же (кроме путей):
mingw32-make -j9 mingw32-make -j9 install SET PATH=c:\Qt\Tools\libclang_80_x64\bin;%PATH% mingw32-make -j9 docs mingw32-make -j9 install_docs
После копируем из папки c:\Qt\Tools\mingw64_810\bin в папку c:\Qt\5.15.17\mingw81_64\bin файлы: libwinpthread-1.dll, libstdc++-6.dll, libgcc_s_dw2-1.dll. В эту же папку можно скопировать libcrypto-3.dll и libssl-3.dll из c:\Qt\Tools\openssl-3.0\x64\bin. Готово!
Настраиваем Qt Creator
-
Запускаем Qt Creator 13.
-
Идем Edit -> Preferences.
-
В категории Kits на вкладке Debuggers нажимаем Add.
-
Пишем имя (например, «GDB for Mingw 8.1 x32»).
-
Выбираем путь к gdb.exe (в моем случае — C:\Qt\Tools\mingw32_810\bin\gdb.exe).
-
Переходим на вкладку Compilers.
-
Add -> MinGW -> C.
-
Name: «MinGW 8.1 x32».
-
Compiler path: C:\Qt\Tools\mingw32_810\bin\gcc.exe.
-
Add -> MinGW -> C++.
-
Name: «MinGW 8.1 x32».
-
Compiler path: C:\Qt\Tools\mingw32_810\bin\g++.exe.
-
Вкладка Qt Versions.
-
Add.
-
Выбираем qmake.exe (C:\Qt\5.15.17\mingw81_32\bin\qmake.exe).
-
Нажомаем ОК. И… открываем опять Edit -> Preferences. Нужно было закрыть чтоб настройки применились.
-
Вкладка Kits.
-
Add.
-
Name: 5.15.17 x32.
-
Compiler C: «MinGW 8.1 x32».
-
Compiler C++: «MinGW 8.1 x32».
-
Debugger: «GDB for Mingw 8.1 x32».
-
Qt version: «Qt 5.15.17 (mingw81_32)».
-
OK.
Готово! Повторяем то же самое для х64 и можно работать.
Для Windows XP
Качаем Qt 5.6.3 с официального сайта, так как на зеркалах такого уже нет. Компилятор MinGW 8.1 подходит, clang для документации вообще не нужен.
Конфигурация:
MD R:\temp SET TEMP=R:\temp SET TMP=R:\temp SET _ROOT=%cd% SET _DST=C:/Qt/5.6.3/mingw81_32 SET PATH=c:\Qt\Tools\mingw32_810\bin;%PATH% SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% call configure.bat -shared -release -platform win32-g++^ -opensource -confirm-license -prefix %_DST%^ -opengl desktop^ -no-avx -no-avx2 -no-sse4.2 -no-sse4.1 -no-ssse3^ -c++std c++1z^ -target xp^ -largefile^ -nomake examples^ -nomake tests^ -skip qtwayland -skip qtwebengine
Сборка такая же:
mingw32-make -j9 mingw32-make -j9 install mingw32-make -j9 docs mingw32-make -j9 install_docs
Qt 6
Он огромен! Нужно порядка 50 Гб для сборки release версии и 75 Гб для Debug версии. RAM-диск такое может вместить только если у Вас много памяти. Тем не менее, сделать RAM-диск всё же будет полезно для temp. 1-2 Гб достаточно. Это снизит нагрузку на SDD.
-
Свежайшая версия на данный момент Qt 6.9.0.
-
Qt Creator можно свежайший взять.
-
Компилятор — MinGW 13.1.
-
Для документации — LibCLang 20. Тестировал libCLang многих других вариантов, но они ломали процесс сборки.
-
Предполагаю что Вы уже поставили OpenSSL 3.0, CMake, Ninja — про них написал выше.
-
Эту версию Qt я собирал с ffmpeg.
Исходники распакуем в C:\Qt\6.9.0 и переименовываем в Src. Компилятор — в C:\Qt\Tools\mingw64_131. Libclang — в папку c:/Qt/Tools/libclang_201 ffmpeg — в папку C:\Qt\Tools.
Конфигурация:
MD R:\temp SET TEMP=R:\temp SET TMP=R:\temp SET _ROOT=%cd% SET _DST=C:/Qt/6.9.0/mingw131 SET _FFMPEG_DIR=C:/Qt/Tools/ffmpeg-n7.1-latest-win64-lgpl-shared-7.1 SET PATH=c:\Qt\Tools\mingw64_1310\bin;%PATH% SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% set OPENSSL_ROOT_DIR=C:/Qt/Tools/openssl-3.0/x64 set OPENSSL_LIBDIR=C:/Qt/Tools/openssl-3.0/x64/lib set OPENSSL_INCDIR=C:/Qt/Tools/openssl-3.0/x64/include call configure.bat -shared -release -platform win32-g++^ -opensource -confirm-license -prefix %_DST%^ -docdir %_DST%/doc^ -examplesdir %_DST%/examples^ -ffmpeg-dir %_FFMPEG_DIR%^ -opengl desktop^ -no-avx -no-avx2 -no-sse4.2 -no-sse4.1 -no-ssse3^ -c++std c++1z^ -nomake tests^ -skip qtcharts,qtdatavis3d,qtvirtualkeyboard,qtnetworkauth,qtlottie^ -skip qtquicktimeline,qtquick3d,qtwebglplugin,qtmqtt,qtcoap^ -skip qthttpserver,qtgraphs,qtgrpc,qtquick3dphysics^ -skip qtwayland -skip qtwebengine
НЕ добавляйте clang в PATH — это сломает процесс сборки!
Не пугайтесь «WARNING: LLVM was found, but it was not built with RTTI support». Это нормально.
Собираем:
cmake --build . --parallel cmake --install . SET LLVM_INSTALL_DIR=c:/Qt/Tools/libclang_201 cmake --build . --target docs cmake --build . --target install_docs
Готово! Если нужно перенести сборку для создания программ на другуй машине — просто переносите всю папку Qt.
Заключение
Qt — замечательный инструмент. И хоть его сборка под Windows с MinGW несколько нетривиальна, но таким образом можно получить наиболее лицензионно чистую сборку и рабочую среду с самым свежим (насколько позволяют капризы Qt) компилятором и кастомным набором модулей.
ссылка на оригинал статьи https://habr.com/ru/articles/917252/
Добавить комментарий