Установка Qt6 из исходного кода в Windows c использованием vcpkg и Msys2
После блокировки доступа к установщику Qt с российских IP со стороны США, установка фреймворка стала сложнее. Да, можно использовать зеркала, но это не всегда удобно. Так же можно использовать Msys2 для установки среды разработки и в дистрибутивах Linux как правило есть уже собранные версии Qt. Но если вы захотите работать с VsCode у вас могут возникнуть проблемы с настройкой из-за особенностей сборки Qt6 для Msys2.
Сегодня мы рассмотрим установку Qt6 из исходного кода в Windows с использованием vcpkg и Msys2.
Что такое vspkg?
vcpkg - бесплатный кроссплатформенный менеджер пакетов для разнообразного ПО, разработанный Microsoft и сообществом. Позволяет устанавливать ПО как из исходного кода, так и в виде исполняемых файлов, со всеми требуемыми зависимостями.
Для vcpkg создан каталог портов (программ) доступных к установке:
Также для vcpkg созданы триплеты – скрипты, настройки и инструкции, созданные специально для данной операционной системы и архитектуры и содержащие дополнительные патчи, которые позволяют осуществлять сборки без ошибок и установки дополнительного ПО.
Фактически для сборки ПО из портов потребуется только компилятор (тулкит) C++, всё остальные дополнительные библиотеки, утилиты и стороннее ПО будет загружено или собрано автоматически!
Существуют триплеты для следующих архитектур:
x86-windows
x64-windows
x64-windows-static
x64-windows-static-md
x64-uwp
arm64-windows
arm-uwp
x64-osx
x64-linuxСистемные требования для сборки с помощью vcpkg
Сборка из исходного кода это всегда длительный процесс требующий большого объема оперативной памяти, производительного процессора и очень много дискового пространства.
Для сборки Qt вам понадобится минимум:
Оперативная память: 8 Гб (Возможно и все 16 Гб в зависимости от собираемых пакетов, я все сборки производил на виртуальных машинах с 16 Гб оперативной памяти);
Процессор: Чем больше – тем лучше (i7 или i9 очень рекомендуется, если запускаете в виртуальной машине выделите как можно больше ядер);
Дисковое пространство: 150-200 Гб при сборке на виртуальной машине, при сборке на ПК оставьте минимум 150 Гб свободного! Например, на виртуальной машине из 150 Гб выделенных, учитывая саму Windows после сборки осталось свободно всего 53Гб. Чем больше модулей вы собираете, тем выше требования с месту на диске!
Для ускорения процесса очень рекомендую использовать SSD.
Ошибки при сборке
Сам процесс сборки максимально автоматизирован, так что по окончании процесса вы просто получаете готовое к использованию ПО!
Если в процессе возникли ошибки, то причин может быть несколько:
Первая проблема - проверяйте доступное дисковое пространство! Система сборки требует очень много свободного места для хранения загруженных и распакованных пакетов, а также для сборки ПО из исходного кода!
Второй проблемой - недостаток оперативной памяти, как правило об этом написано в файле лога, имя которого выводится на экран вместе с сообщением об ошибке!
Третья проблема – плохое качество соединения с интернетом или его отсутствие, так как без интернета эта система не работает! Как вариант, может быть заблокирован доступ к сайтам с исходным кодом. Здесь всё проще, даже если основной сайт недоступен, vcpkg автоматически загрузит нужные пакеты с альтернативного зеркала, но на перебор зеркал уходит дополнительное время для каждого пакета!
Время сборки
Время сборки может отличаться, в зависимости от производительности вашего ПК и его текущей загруженности.
Так же оно сильно зависит от скорости подключения к сети Интернет, так как весь исходный код загружается с различных ресурсов или зеркал, что тоже негативно может сказываться на времени сборки.
В среднем она может занимать от 3 до 8 часов, но всё зависит от «железа».
Например, на сервере с Xeon Silver 4110 2.1GHz на виртуальной машине с выделенными 16 ядрами и 16 Гб оперативной памяти, на серверных HDD в RAID 10 сборка заняла около 6 часов.
На Intel Core i9 c 6 выделенными ядрами и 16 Гб с SSD сборка заняла около 3 часов.
Дополнительные рекомендации
Чтобы ускорить процесс сборки я рекомендую внести папку, в которой производится сборка, а также папку в которую вы устанавливаете vcpkg в список исключений вашего антивируса.
На виртуальной машине отключить в настройках Windows Defender, проверить и отключить защиту в реальном времени. Даже если вы её ранее отключали Windows её может включить обратно!
Таким образом эти программы защиты не будут направсно тратить ресурсы процессора, препятствуя эффективной сборке.
Установка Msys2
Все установки будут производится на только что установленной с Windows 10 22H2 в виртуальной машине Hyper-V. Обновления Windows 10 временно отключены. Windows Defender тоже полностью отключен.
Установку Msys2 я уже рассматривал в этой статье - https://blog.altuninvv.ru/qt/qt6/установка-qt-660-с-помощью-msys2-в-windows-10
Просто следуйте инструкциям до раздела - Установка пакетов Qt6.
Обратите внимание! Устанавливать в Msys2 пакеты для Qt6 НЕ НУЖНО!
Через консоль Msys2 установим нужные пакеты:
pacman -S mingw-w64-x86_64-gccЭто всё что нам потребуется непосредственно для сборки!
Установка vcpkg
Откроем консоль cmd в дальнейшем все действия мы будем проводить через нее.
Обратите внимание! Запускать консоль нужно только от обычного пользователя. Запускать от администратора – НЕ НУЖНО!
Очень важно, чтобы путь к папке с программой был как можно короче, дабы не возникло проблем со слишком длинными путями до папок и файлов!
Создадим папку для vcpkg:
mkdir c:\tools
cd c:\toolsЗагрузим vcpkg:
curl -L -o "vcpkg.zip" https://github.com/microsoft/vcpkg/archive/refs/heads/master.zipРаспакуем:
tar -vxf vcpkg.zipПереименуем папку:
ren vcpkg-master vcpkgЗагрузим запускаемый файл:
cd vcpkg
.\bootstrap-vcpkg.batДобавим папки:
c:\tools\vcpkg\
C:\msys64\mingw64\binв переменные среды PATH, как мы делали при установке Msys2.
В этом же окне создадим новые системные переменные среды:
VCPKG_DEFAULT_TRIPLET=x64-mingw-dynamic
VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-dynamicЭти две переменные среды указывают vcpkg использовать компилятор mingw, который мы установили через MSYS2.
У нас получится:
Обратите внимание! При изменении любых переменных окружения, необходимо перезапускать все запущенные приложения, которые используют эти переменные!
Закроем все консоли и откроем cmd снова и запустим:
vcpkg usage: vcpkg <command> [--switches] [--options=values] [arguments] @response_file
@response_file Contains one argument per line expanded at that location
…
For More Help:
help topics Displays full list of help topics
help <topic> Displays specific help topic
help commands Displays full list of commands, including rare ones not listed here
help <command> Displays help detail for <command>
For more help (including examples) see https://learn.microsoft.com/vcpkgВывод обрезан.
Установка прошла успешно.
Выбор пакетов для установки
В состав фреймворка Qt6 входит большое количество разных библиотек и инструментов. Не все из них могут вам понадобиться, поэтому нет смысла тратить дисковое пространство и время на сборку всех возможных пакетов.
Список всех доступных пакетов можно найти в каталоге:
Обратите внимание, по опыту попыток собирать Qt из исходного кода, я крайне не советую даже пытаться собирать qtwebview! Для этого вам потребуется мощный сервер с большим количеством оперативной памяти и дисковым пространством!
Какие пакеты вам могут понадобится? Вот список некоторых из них:
qtbase – все основные инструменты и библиотеки – обязателен к установке!
qt5compat – разнообразные библиотеки, например кодеки для работы со строками в разных кодировках.
qttools – разнообразные утилиты в том числе и qtdesigner
qttranslations – все для работы с i18n
qtdeclarative – библиотеки и инструменты для работы с Qt Quick 2
qtserialport – библиотеки для работы с com (RS-232) портом
Особенности сборки
В процессе сборки вы сможете заметить, что vcpkg производит сборку двух версий одного итого же пакета:
-- Configuring x64-mingw-dynamic
-- Building x64-mingw-dynamic-dbg
-- Building x64-mingw-dynamic-relvcpkg при установке Qt6 собирает две версии:
dbg
reldbg – debug - версия для отладки, она содержит дополнительную отладочную информацию, которая необходима для использования во время отладки приложения
rel – release - окончательная версия, не содержащая ничего ненужного, идеально подходит для отправки конечному пользователю!
После окончания сборки в папке с установленным Qt6 вы найдете две папки:
D:\tools\vcpkg\installed\x64-mingw-dynamic\bin
D:\tools\vcpkg\installed\x64-mingw-dynamic\debug\bin\В папке:
D:\tools\vcpkg\installed\x64-mingw-dynamic\binНаходятся релизные .dll-файлы необходимые для запуска программы на Qt6
В папке:
D:\tools\vcpkg\installed\x64-mingw-dynamic\debug\bin\Находятся такие же библиотеки, но для debug-версии.
Обратите внимание, для некоторых файлов будут так же различаться имена файлов:
libpcre2-16.dll - для релизной версии
libpcre2-16d.dll – для debug-версии
Запуск сборки из исходного кода в vcpkg
Создадим папку для сборки:
mkdir c:\bВ Windows существуют некоторые проблемы при работе с очень длинными именами файлов и папок.
Чтобы избежать возможных проблем, вся сборка будет производится в папке c:\b, а уже готовые файлы будут установлены в папку
c:\tools\vcpkg\installedТаким образом, вы всегда сможете легко перенести папки с собранными программами на другой ПК, а в случае появления новой версии просто снова запустить сборку.
Чтобы начать процесс сборки запустим консоль cmd и введем:
vcpkg install qtbase qtdeclarative qttranslations qt5compat qttools --x-buildtrees-root=C:\bНачнется загрузка и установка требуемых утилит:
A suitable version of cmake was not found (required v3.30.1).
Downloading https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1-windows-i386.zip -> cmake-3.30.1-windows-i386.zip
Successfully downloaded cmake-3.30.1-windows-i386.zip
Extracting cmake...
A suitable version of 7zip was not found (required v24.9.0).
Downloading https://github.com/ip7z/7zip/releases/download/24.09/7z2409.exe -> 7z2409.7z.exe
Successfully downloaded 7z2409.7z.exe
Extracting 7zip...
A suitable version of 7zr was not found (required v24.9.0).
Downloading https://github.com/ip7z/7zip/releases/download/24.09/7zr.exe -> 44d8504a-7zr.exe
Successfully downloaded 44d8504a-7zr.exeЕсли некоторые утилиты были установлены через Msys2 и доступны по путям поиска PATH, то возможно будут использоваться они.
Затем будут определены необходимые порты (библиотеки и программы) и их зависимости, а так же дополнительные инструменты для установки:
The following packages will be built and installed:
* brotli:x64-mingw-dynamic@1.1.0#1
* bzip2[core,tool]:x64-mingw-dynamic@1.0.8#6
* dbus:x64-mingw-dynamic@1.16.2#1
* double-conversion:x64-mingw-dynamic@3.3.1
* egl-registry:x64-mingw-dynamic@2024-01-25
* expat:x64-mingw-dynamic@2.7.1
* freetype[brotli,bzip2,core,png,zlib]:x64-mingw-dynamic@2.13.3
* harfbuzz[core,freetype]:x64-mingw-dynamic@11.3.3
* icu[core,tools]:x64-mingw-dynamic@74.2#6
* libjpeg-turbo:x64-mingw-dynamic@3.1.1
* libpng:x64-mingw-dynamic@1.6.50
* libpq[core,lz4,openssl,zlib]:x64-mingw-dynamic@16.9
* lz4:x64-mingw-dynamic@1.10.0
* opengl:x64-mingw-dynamic@2022-12-04#3
* opengl-registry:x64-mingw-dynamic@2024-02-10#1
* openssl:x64-mingw-dynamic@3.5.1#1
* pcre2[core,jit,platform-default-features]:x64-mingw-dynamic@10.45
qt5compat[big-codecs,codecs,core,qml,textcodec]:x64-mingw-dynamic@6.8.3
qtbase[brotli,concurrent,core,dbus,dnslookup,doubleconversion,freetype,gui,harfbuzz,icu,jpeg,network,opengl,openssl,pcre2,png,sql,sql-psql,sql-sqlite,testlib,thread,widgets,zstd]:x64-mingw-dynamic@6.8.3#5
qtdeclarative:x64-mingw-dynamic@6.8.3
* qtlanguageserver:x64-mingw-dynamic@6.8.3
* qtshadertools:x64-mingw-dynamic@6.8.3
* qtsvg:x64-mingw-dynamic@6.8.3
qttools[core,designer,linguist]:x64-mingw-dynamic@6.8.3
qttranslations:x64-mingw-dynamic@6.8.3
* sqlite3[core,json1]:x64-mingw-dynamic@3.50.4
* vcpkg-cmake:x64-mingw-dynamic@2024-04-23
* vcpkg-cmake-config:x64-mingw-dynamic@2024-05-23
* vcpkg-cmake-get-vars:x64-mingw-dynamic@2025-05-29
* vcpkg-make:x64-mingw-dynamic@2025-07-09
* vcpkg-tool-meson:x64-mingw-dynamic@1.8.2
* zlib:x64-mingw-dynamic@1.3.1
* zstd:x64-mingw-dynamic@1.5.7
Additional packages (*) will be modified to complete this operation.
Detecting compiler hash for triplet x64-mingw-dynamic...Произведена загрузка дополнительных инструментов, не установленных на нашем ПК:
A suitable version of git was not found (required v2.7.4).
Downloading https://github.com/git-for-windows/git/releases/download/v2.47.1.windows.2/PortableGit-2.47.1.2-64-bit.7z.exe -> PortableGit-2.47.1.2-64-bit.7z.exe
Successfully downloaded PortableGit-2.47.1.2-64-bit.7z.exe
Extracting git...
A suitable version of powershell-core was not found (required v7.2.24).
Downloading https://github.com/PowerShell/PowerShell/releases/download/v7.2.24/PowerShell-7.2.24-win-x64.zip -> PowerShell-7.2.24-win-x64.zip
..Строка:
Compiler found: C:/msys64/mingw64/bin/x86_64-w64-mingw32-g++.exeОзначает что vcpkg успешно нашел установленный нами компилятор!
После этого начнется загрузка, сборка и установка пакетов:
Restored 0 package(s) from C:\Users\user\AppData\Local\vcpkg\archives in 1.38 ms. Use --debug to see more details.
Installing 1/33 vcpkg-cmake:x64-mingw-dynamic@2024-04-23...Будут загружены и собраны все необходимые программы и библиотеки. После этого будет запущена сборка пакетов самого Qt6.
Как я уже говорил данный процесс занимает большое количество времени от 3 до 8 часов.
Если вы ваш ПК соответствует системным требованиям для сборки, никаких проблем в процессе сборки возникнуть не должно.
Когда мы получим строчку:
All requested installations completed successfully in: 6 hЭто будет означать, что сборка успешно завершена!
Проверка собранного Qt6
Проверим установку, перейдем в папку:
cd C:\tools\vcpkg\installed\x64-mingw-dynamic\tools\Qt6\binЗапустим:
qmake6 -v
QMake version 3.1
Using Qt version 6.8.3 in C:/tools/vcpkg/installed/x64-mingw-dynamic/libПри переносе на другой пк, путь:
C:/tools/vcpkg/installed/x64-mingw-dynamic/libИзменится автоматически, например при установке в папку d:\Qt6 вывод будет:
QMake version 3.1 Using Qt version 6.8.3 in D:/qt6/lib Теперь вы можете перенести папку
C:\tools\vcpkg\installed\x64-mingw-dynamicНа другой компьютер и переименовать её, например в
C:\Qt6.Установка завершена.
В следующей статье мы рассмотрим настройку VSCode для сборки проектов в Qt6.
Заключение
Сегодня мы рассмотрели установку Qt6 из исходного кода в Windows 10 с использованием vcpkg:
Рассмотрели, что такое vcpkg;
Что такое триплеты и для каких архитектур они созданы;
Рассмотрели системные требования для сборки с помощью vcpkg;
Какие ошибки могут возникать при сборке с помощью vcpkg;
Были рассмотрены дополнительные рекомендации по настройки Windowsдля сборки с помощью vcpkg;
Был установлен Msys2 в минимальной конфигурации для использования с vcpkg;
Был установлен vcpkg и произведено создание переменных окружения для использования компилятора Mingw в vcpkg;
Рассмотрены некоторые пакеты Qt6 доступные для установки в vcpkg;
Были рассмотрены особенности сборки Qt6 с vcpkg, а также папки в которые помещаются собранные .dll-файлы:
Мы произвели запуск сборки Qt6 и кратко рассмотрели, как происходит настройка и сборка;
После окончания сборки мы проверили установку, запустив qmake6.exe.
Добавить комментарий