Qt 6.8.1 static build. Статическая сборка Qt 6.8 под Microsoft Visual Studio 2022 (msvc2022, Windows x64)

ОС: Windows 11
Microsoft Visual Studio 2022
Qt 6.8.1

1. Скачиваем архив исходников Qt для Windows (qt-everywhere-src-6.8.1.zip) с официального сайта qt.

2. Создаем каталог, например, c:\Qt\Qt6.8.1-x64-msvc2022-static\6.8\Src и распаковываем в него содержимое архива исходников. Сборка в дальнейшем будет привязана к данному каталогу и букве диска. Получим подкаталоги 6.8\Src\qtbase, 6.8\Src\coin и т.д.).

3. Устанавливаем:
Cmake (https://cmake.org/download)
StrawberryPerl (https://strawberryperl.com)
Python 3 (https://www.python.org)
Node.js (https://nodejs.org)
ninja (https://github.com/ninja-build/ninja/releases)

4. Запускаем командную строку (cmd) с правами администратора и последовательно выполняем в ней следующие команды:

Задаем системные переменные Qt:

set QTDIR=c:\Qt\qt6.8.1-x64-msvc2022-static\6.8\Src\qtbase set PATH=c:\Qt\qt6.8.1-x64-msvc2022-static\6.8\Src\qtbase\bin;%PATH%

Системная переменная пути к LLVM:

set PATH=c:\Program Files\LLVM\bin;%PATH% set LLVM_INSTALL_DIR=C:\Program Files\LLVM

Системные переменные пути к ninja и gnuwin32 (для QtPdf):

set PATH=c:\Qt\Tools\Ninja;%PATH% set PATH=c:\Program Files (x86)\GnuWin32\bin;%PATH%

Для Microsoft Visual Studio 2022 (msvc2022):

cd "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build" vcvarsall.bat amd64

Конфигурация:

configure -debug-and-release -static -static-runtime -opensource -confirm-license -platform win32-msvc -nomake examples -nomake tests -qt-zlib -qt-libpng -qt-libjpeg -prefix "c:\Qt\qt6.8.1-x64-msvc2022-static\6.8" -skip qtandroidextras -skip qtactiveqt -skip qtgamepad -skip qtmacextras -skip qtlocation -skip qtlottie -skip qtquick3d -skip qtquick3dphysics -skip qtquickcontrols -skip qtquickcontrols2 -skip qtquickeffectmaker -skip qtquicktimeline -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtspeech -skip qtvirtualkeyboard -skip qtwayland -skip qtwebengine -skip qtx11extras -no-dbus -no-openssl -skip qtgraphs -skip qdoc

где:

-prefix "c:\Qt\qt6.8.1-x64-msvc2022-static\6.8" - путь, куда будет помещена сборка,
Пропущенные модули: -skip qtandroidextras -skip qtactiveqt -skip qtgamepad -skip qtmacextras -skip qtlocation -skip qtlottie -skip qtquick3d -skip qtquick3dphysics -skip qtquickcontrols -skip qtquickcontrols2 -skip qtquickeffectmaker -skip qtquicktimeline -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtspeech -skip qtvirtualkeyboard -skip qtwayland -skip qtwebengine -skip qtx11extras -skip qtgraphs -skip qdoc
-nomake examples -nomake tests - отказ от сборки тестов и примеров
-platform win32-msvc - выбор платформы
-confirm-license - подтверждение согласия с лицензией
-static -static-runtime - статическая сборка

Переход в каталог сборки:

cd c:\Qt\qt6.8.1-x64-msvc2022-static\6.8\Src

Сборка:

cmake --build . --parallel

Установка:

cmake --install .

Сборка и установка документации (не прошло):

cmake --build . --target docs cmake --build . --target install_docs

После сборки каталог Src можно удалить, там лежат исходники и более 100 Гигабайт промежуточных файлов.

Возможные ошибки:

  • QtPdf won't be built. Python3 html5lib is missing. Необходимо установить html5lib:
pip install html5lib

QtPdf won't be built. Tool gperf is required.
QtPdf won't be built. Tool bison is required.
QtPdf won't be built. Tool flex is required.
Необходимо установить:
Gperf (https://sourceforge.net/projects/gnuwin32/files/gperf/3.0.1/gperf-3.0.1.exe/download)
Flex (https://gnuwin32.sourceforge.net/downlinks/flex.php)
Bison (http://downloads.sourceforge.net/gnuwin32/bison-2.4.1-setup.exe)

После сборки каталог Src будет занимать больше 100 Гигабайт. Его можно будет удалить.

QDoc собрать статически не удалось.

QtWebengine не поддерживает статическую сборку.

LLVM с официального сайта не подходит для данной статической сборки. Будет всё равно выводиться предупреждение.
Оказывается необходимо выбрать с сайта qt (https://qt-mirror.dannhauer.de/development_releases/prebuilt/libclang/) определенную версию LLVM (собранную разработчиками Qt) со статическими библиотеками, которых нет в официальной версии LLVM. Мне это сделать не удалось: выводились ошибки при сборке самого Qt6.


Поддержать проект (подарком):
ЮMoney 4100 1188 9778 9041
карта 5599 0021 0667 6341

1
2 комментария

Привет, спасибо за статью.

Хочу внести корректировки. Собирал себе MSVC2022 статичный тулчейн. Мои действия были проще:

1. На борту имел VS2022, Python 3.11, strawberry perl
2. Через их QtInstaller скачал
— Cmake
— Openssl
— Jinja
— исходники 6.8.1
и пр. что было надо.
3. Чтобы не страдать, то сделал копию C:/Qt/6.8.1/Src в C:/Qt/6.8.1/Src_Static и работал с ней.
4. Создал себе папку C:/Qt/6.8.1/msvc2022_64_static для будущего тулчейна
5. В cmd (можно батником) выполнил
5.1 Включил подсос от встудии:
call "C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvarsall.bat" amd64
5.2 настроил временные энвы
set QTDIR=C:/Qt/6.8.1/Src_Static/qtbase
set PATH=%QTDIR%/bin;%PATH%
set LLVM_INSTALL_DIR=C:/Qt/Tools/llvm-mingw1706_64
set PATH=%LLVM_INSTALL_DIR%/bin;%PATH%
set CMAKE_ROOT=C:/Qt/Tools/CMake_64
set PATH=%CMAKE_ROOT%/bin;%PATH%
set PATH=C:/Qt/Tools/Ninja;%PATH%
set QT_MSVC_STATIC_DIR=C:/Qt/6.8.1/msvc2022_64_static
set OPENSSL_DIR=C:/Qt/Tools/OpenSSLv3/Win_x64
set PATH=%OPENSSL_DIR%/bin;%PATH%
set OPENSSL_INCDIR=%OPENSSL_DIR%/include
set OPENSSL_LIBDIR=%OPENSSL_DIR%/lib

5.3 Проверка доступности инструментов
where perl.exe
where python.exe
where cmake.exe
where ninja.exe

5.4 Переходим в папку
cd C:/Qt/6.8.1/Src_Static

5.5 готовим
configure.bat -release -static -static-runtime ^
-opensource -confirm-license ^
-platform win32-msvc ^
-nomake examples -nomake tests ^
-qt-zlib -qt-libpng -qt-libjpeg ^
-direct2d -plugin-manifests ^
-prefix %QT_MSVC_STATIC_DIR% ^
-skip qtandroidextras ^
-skip qtmacextras -skip qtwayland -skip qtx11extras ^
-skip qtwebengine -skip qtspeech -skip qtvirtualkeyboard ^
-ssl -openssl-linked ^
-I %OPENSSL_INCDIR% -L %OPENSSL_LIBDIR%

5.6 собираем
cmake --build . --parallel

5.7 ставим
cmake --install .

В итоге, у меня норм пашет.

set LLVM_INSTALL_DIR=C:/Qt/Tools/llvm-mingw1706_64
set PATH=%LLVM_INSTALL_DIR%/bin;%PATH%
зачем это надо?