Building Static Qt 6 for Desktop OpenGL with MinGW GCC 16.2 Статическая сборка Qt 6 для Desktop OpenGL с MinGW GCC 16.2

Key Results:
  • Installation folder: C:\Qt\6.12.0_static_mingw162 — only ~496 MB
  • Clone time: ~2 minutes (shallow clone of qtbase only)
  • Build time: ~20 minutes on an Intel Core i7-7700 with SSD
  • Release stripped .exe: ~30 MB (compresses down to ~12 MB in zip) with zero external DLL dependencies!
Ключевые результаты:
  • Папка установки: C:\Qt\6.12.0_static_mingw162 — всего ~496 МБ
  • Время клонирования: ~2 минуты (только qtbase)
  • Время сборки: ~20 минут на процессоре Intel Core i7-7700 с SSD
  • Финальный сжатый (stripped) .exe: ~30 МБ (около 12 МБ в архиве) без каких-либо внешних DLL!

1. Prerequisites 1. Необходимые инструменты

Before building, install the required toolchains and ensure their binary directories are added to your System PATH: Перед началом сборки установите необходимые инструменты и убедитесь, что пути к ним добавлены в переменную PATH:

2. Clone Only qtbase 2. Клонирование только модуля qtbase

Because you only need Desktop OpenGL, QWindow, and QtWidgets, you do not need the full umbrella Qt repository or Perl. Everything you need is inside qtbase: Так как для работы нужны только Desktop OpenGL, QWindow и QtWidgets, вам не требуется клонировать весь репозиторий Qt или устанавливать Perl. Всё необходимое уже находится внутри qtbase:

mkdir C:\QtSource
cd C:\QtSource

# Shallow clone of qtbase only (~150 MB download)
git clone --depth 1 -b v6.12.0 https://code.qt.io/qt/qtbase.git

3. Configure for Static Build 3. Конфигурация статической сборки

Create a separate build folder and configure Qt using configure.bat: Создайте отдельную папку для сборки и запустите конфигурацию с помощью configure.bat:

mkdir C:\QtBuild
cd C:\QtBuild

C:\QtSource\qtbase\configure.bat ^
  -static ^
  -release ^
  -prefix C:\Qt\6.12.0_static_mingw162 ^
  -opengl desktop ^
  -nomake examples ^
  -nomake tests

4. Compile and Install 4. Компиляция и установка

Run ninja to start building with all CPU threads, then install: Запустите ninja для многопоточной компиляции, а затем установите:

ninja
ninja install
After ninja install completes, you can safely delete C:\QtBuild and C:\QtSource to free up SSD space. После завершения ninja install вы можете безопасно удалить папки C:\QtBuild и C:\QtSource для освобождения места на диске.

5. Register Kit in Qt Creator 5. Настройка Kit в Qt Creator

Open Qt Creator and navigate to Edit > Preferences: Откройте Qt Creator и перейдите в Edit > Preferences:

  1. Qt Versions: Click Add and select C:\Qt\6.12.0_static_mingw162\bin\qmake.exe Qt Versions: Нажмите Add и укажите C:\Qt\6.12.0_static_mingw162\bin\qmake.exe
  2. Compilers: Verify your WinLibs GCC 16.2 (C and C++) compilers are detected under Auto-detected. Compilers: Убедитесь, что компиляторы WinLibs GCC 16.2 (C и C++) присутствуют в разделе Auto-detected.
  3. Debuggers: Click Add, set Name to GDB (WinLibs MinGW 16.2), and point Path to your gdb.exe (e.g., C:\mingw64_16.2\bin\gdb.exe). Debuggers: Нажмите Add, назовите GDB (WinLibs MinGW 16.2) и укажите путь к gdb.exe (например, C:\mingw64_16.2\bin\gdb.exe).
  4. Kits: Click Add:
    • Name: Qt 6.12.0 Static (MinGW 16.2)
    • Compiler C/C++: WinLibs GCC 16.2
    • Debugger: GDB (WinLibs MinGW 16.2)
    • Qt version: The static version registered in step 1
    • CMake Generator: Ninja
    Kits: Нажмите Add:
    • Name: Qt 6.12.0 Static (MinGW 16.2)
    • Compiler C/C++: WinLibs GCC 16.2
    • Debugger: GDB (WinLibs MinGW 16.2)
    • Qt version: Добавленная статическая версия из шага 1
    • CMake Generator: Ninja

6. Project Configuration & Testing in Qt Creator 6. Конфигурация проекта и запуск в Qt Creator

You can clone or download the complete ready-to-run demo project directly from GitHub: github.com/ivan-enzhaev/OpenGLTestQt6 Вы можете клонировать или скачать готовый к запуску демонстрационный проект с GitHub: github.com/ivan-enzhaev/OpenGLTestQt6

git clone https://github.com/ivan-enzhaev/OpenGLTestQt6.git

How to Open and Run in Qt Creator: Как открыть и запустить проект в Qt Creator:

  1. In Qt Creator, click File > Open File or Project... (or press Ctrl+O). В Qt Creator нажмите File > Open File or Project... (или нажмите Ctrl+O).
  2. Navigate to the cloned repository folder and select the CMakeLists.txt file. Перейдите в папку склонированного репозитория и выберите файл CMakeLists.txt.
  3. In the Configure Project screen, select your kit Qt 6.12.0 Static (MinGW 16.2).
    Important: Only Debug is checked by default. Make sure to also check the Release checkbox so that Qt Creator configures the optimized release build! Then click Configure Project.
    На экране Configure Project выберите ваш Kit Qt 6.12.0 Static (MinGW 16.2).
    Важно: По умолчанию галочка стоит только на Debug. Обязательно поставьте галочку напротив Release, чтобы Qt Creator сконфигурировал оптимизированную Release-сборку! После этого нажмите Configure Project.
  4. Switch the active build configuration to Release (click the monitor icon in the bottom-left corner of Qt Creator or press Ctrl+T). Переключите активную конфигурацию сборки на Release (нажмите на значок монитора в левом нижнем углу окна Qt Creator или нажмите Ctrl+T).
  5. Press Ctrl+R to build and launch! The resulting single executable in the release build folder will be stripped down to ~30 MB and runs without needing any external DLLs. Нажмите Ctrl+R для сборки и запуска! Итоговый одиночный .exe файл в папке release-сборки будет автоматически сжат до ~30 МБ и запустится без каких-либо внешних DLL.

CMakeLists.txt Reference: Содержимое CMakeLists.txt:

Here is the clean CMakeLists.txt used in the repository, configured for static linking and automatic stripping: Минимальный и чистый CMakeLists.txt из репозитория с флагом -static и авто-strip для Release:

cmake_minimum_required(VERSION 3.21)
project(OpenGLTestQt6 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt6 COMPONENTS Widgets OpenGLWidgets REQUIRED)

add_executable(OpenGLTest WIN32
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
)

target_link_libraries(OpenGLTest PRIVATE
    Qt6::Widgets
    Qt6::OpenGLWidgets
    opengl32
)

if(MINGW)
    target_link_options(OpenGLTest PRIVATE
        -static
        $<$<CONFIG:Release>:-s>
    )
endif()
Important Note on LGPLv3 & Static Linking Важное примечание о лицензии LGPLv3 и статической линковке
Don't forget about this: If you distribute a statically built Qt .exe under the free LGPLv3 license, you must choose one of two options:
  1. Make your project open source and share your full source code.
  2. Keep your source code private, but provide your compiled .obj files so users can relink the application with their own Qt library.
Не забывайте об этом: если вы распространяете статически собранный исполняемый файл Qt .exe под бесплатной лицензией LGPLv3, вам необходимо выбрать один из двух вариантов:
  1. Сделать проект открытым (Open Source) и опубликовать весь исходный код.
  2. Оставить исходный код закрытым, но предоставить скомпилированные объектные файлы (.obj), чтобы пользователи могли перелинковать приложение со своей версией Qt.

Support My Work Поддержать проект

If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.

Sberbank (Russia only) Сбербанк (только для РФ)

Sberbank SBP QR Code

Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)

+7 (917) 212-29-59

USDT TRC20

USDT TRC20 QR Code

Support via Cryptocurrency Поддержка криптовалютой

TMtY1YifNf6FKvgeFmqKGQR4NStKr3csGp