Официальный способ установки готовых бинарников 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).

Qt Creator 13 - Debuggers
Qt Creator 13 - Debuggers
  • Переходим на вкладку 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 Creator 13 - Compilers
Qt Creator 13 - Compilers
  • Вкладка Qt Versions.

  • Add.

  • Выбираем qmake.exe (C:\Qt\5.15.17\mingw81_32\bin\qmake.exe).

Qt Creator 13 - Qt Versions
Qt Creator 13 - Qt Versions
  • Нажимаем ОК. И... открываем опять 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.

Qt Creator 13 - Kits
Qt Creator 13 - Kits

Готово! Повторяем то же самое для х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) компилятором и кастомным набором модулей.

Комментарии (13)


  1. JordanCpp
    10.06.2025 15:15

    Я вообще удивлён, что ещё не выложили на gitflic сорцы и не делают текущие сборки. Зашёл скачал, если нужно скачал сорцы и собрал.


  1. DungeonLords
    10.06.2025 15:15

    Собирать из исходников это true путь, одобряю, но также замечу, что существует альтернативный установщик aqt


    1. yurix4 Автор
      10.06.2025 15:15

      Интересный способ, не знал о таком. Тем не менее, в их документации сходу не вижу как, например, добавить поддержку ffmpeg (который я добавил в примере для Qt 6.9). Потому предположу что компиляция из исходников предпочтительнее там где нужна кастомизация. Там же вижу, что в качестве Qt 5.15 самый свежий доступен 5.15.2, в то время как из исходников собираем 5.15.17 (и к этой версии исправили тучу ошибок).


  1. DungeonLords
    10.06.2025 15:15

    "Qt 6 не поддерживает x86"
    Это неправда. Qt это фреймворк с модульной структурой. Модули можно включать/не включать в сборку (чем автор и занимается). Так вот, модуль qtbase поддерживается x86. Так что я даже на i586 кручу Qt 6 последних версий...

    Если кому интересна история Qt 6, то... Одно время The Qt Company действительно планировала отказаться от x86, но ваш покорный слуга вмешался и лично объяснил как важно сохранить поддержку x86 хотя бы в qtbase... В итоге поддержку добавили...


    1. yurix4 Автор
      10.06.2025 15:15

      Спасибо Вам за Ваши старания. Печально видеть как прекращается поддержка вполне рабочего железа.


  1. MusokeSman
    10.06.2025 15:15

    с помощью vcpkg или conan - однотипно собираеться qt и другие библиотеки


    1. yurix4 Автор
      10.06.2025 15:15

      Было бы неплохо б если бы Вы рассказали о таком способе в отдельной статье. Увы, с ходу не могу найти достаточно информации об этом. Видимо на сайте Qt что-то уже удалили - "There is currently no text in this page".


      1. MusokeSman
        10.06.2025 15:15

        git clone https://github.com/microsoft/vcpkg.git
        cd vcpkg
        bootstrap-vcpkg.bat
        vcpkg install qtbase qttools qttranslations

        под linux так же только bootstrap-vcpkg.sh


        1. yurix4 Автор
          10.06.2025 15:15

          Выглядит несложно, но ведь это для сборки с компилятором от Microsoft, разве нет? Или оно само скачает правильную версию mingw с правильной версией libclang?


          1. MusokeSman
            10.06.2025 15:15

            тут можно указать чем собирать https://learn.microsoft.com/ru-ru/vcpkg/users/triplets#vcpkg_cmake_system_name (не факт что будет правильная версия). касательно компилятора микрософт - его можно использовать для сборки qt - https://visualstudio.microsoft.com/ru/license-terms/vs2022-ga-diagnosticbuildtools/ Кроме того, если у вас нет действующей лицензии на какой-либо из Продуктов Visual Studio, вы все равно можете устанавливать и использовать копии программного обеспечения для компиляции и сборки компонентов C++, которые: (i) были выпущены третьим лицом по лицензии на программное обеспечение с открытым исходным кодом, одобренной Инициативой по открытому исходному коду; (ii) также обоснованно необходимы для создания ваших приложений («Зависимости с открытым исходным кодом»).


            1. yurix4 Автор
              10.06.2025 15:15

              тут можно указать чем собирать

              Спасибо, поизучаю этот вариант.


  1. diamn
    10.06.2025 15:15

    Компилятор от Microsoft не является полностью свободным, и его нельзя использовать если нет лицензии на Visual Studio

    Качаем Qt 5.15.17

    5.15.17 это LTS выпуск, он доступен по коммерческой лицензии на Qt.
    Starting with Qt 5.15, long term support (LTS) will only be available to commercial customers. This means open-source users will receive patch-level releases of 5.15 until the next minor release will become available.
    Т.е. LTS выпуски это выпуски, вышедшие после следующего минорного/мажорного релиза. 5.15.17 вышла после 6.0.


    1. yurix4 Автор
      10.06.2025 15:15

      Если я правильно понял, то именно бинарники 5.15.17 доступны по коммерческой лицензии. Исходники Qt не меняли лицензию, т.е. вполне законно собираются в LGPL. Да, оно вышло после 6.0, но остается ценным из-за поддержки (не таких уж) старых систем.