Сборка Qt из исходного кода пошагово

Как собрать qt из исходников

Как собрать qt из исходников

Сборка Qt из исходников – необходимый шаг для разработчиков, которым требуется контроль над версиями библиотек, оптимизация под конкретную архитектуру или интеграция патчей. Официальные бинарные сборки удобны, но не всегда подходят для специфических задач: например, при работе с Qt 6.7+ на ARM-процессорах или при необходимости отключить ненужные модули для уменьшения размера итогового пакета. В этом руководстве разберём процесс сборки на Linux (Ubuntu 22.04/Debian 12) и Windows (с использованием MSVC 2022), включая подготовку окружения и типичные ошибки.

Для сборки потребуется не менее 15 ГБ свободного дискового пространства и 8 ГБ оперативной памяти (рекомендуется 16 ГБ при параллельной компиляции с -jN). На системах с меньшими ресурсами процесс может занять до 4–6 часов. Начнём с установки зависимостей: для Linux это пакеты build-essential, libgl1-mesa-dev, libxcb-xinerama0-dev, а для Windows – Python 3.9+ и Perl 5.32+ (обязательно добавьте их в PATH). Избегайте использования MinGW для сборки Qt 6.x – официально поддерживается только MSVC.

Ключевые параметры конфигурации, которые стоит учитывать:

  • -prefix – путь установки (например, /opt/qt-6.7.0);
  • -opensource -confirm-license – принятие лицензии LGPL;
  • -nomake examples -nomake tests – экономия времени и места;
  • -skip qtwebengine – если не требуется Chromium-движок (сокращает сборку на 30–40%).

На Windows дополнительно укажите -platform win32-msvc и убедитесь, что переменные среды INCLUDE и LIB настроены корректно. Для отладки используйте -debug-and-release, но помните, что это удвоит время сборки.

После успешной конфигурации запустите cmake --build . --parallel (Linux) или jom (Windows). На этапе make install Qt установится в указанный -prefix. Проверьте сборку, запустив qmake --version и собрав простой проект с QApplication. Если возникнут ошибки компиляции, первым делом проверьте логи в config.log – там часто указаны недостающие зависимости или конфликтующие версии библиотек.

Подготовка системы и установка зависимостей для сборки

Сборка Qt из исходников требует предварительной настройки системы. Начните с обновления пакетного менеджера и установки базовых инструментов компиляции. Для Linux-систем на базе Debian/Ubuntu выполните:

  • sudo apt update && sudo apt upgrade -y
  • sudo apt install -y build-essential cmake git perl python3

На Fedora/CentOS используйте dnf или yum с аналогичными пакетами: gcc-c++ make cmake git perl python3. Для Arch Linux подойдет pacman -S base-devel cmake git perl python.

Qt зависит от библиотек графической подсистемы. Установите их в зависимости от целевой платформы:

  • X11: libx11-dev libxext-dev libxrender-dev libxrandr-dev libxkbcommon-dev libxkbcommon-x11-dev
  • Wayland: libwayland-dev wayland-protocols extra-cmake-modules
  • OpenGL: libgl1-mesa-dev libgles2-mesa-dev

Для мультимедийных возможностей добавьте libpulse-dev libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev. На системах с NVIDIA потребуется libglvnd-dev для корректной работы OpenGL.

Если планируется сборка с поддержкой Qt WebEngine, установите дополнительные зависимости:

  • libnss3-dev libdbus-1-dev libfontconfig1-dev libfreetype6-dev libicu-dev
  • Для Chromium-части: libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev

На системах с ограниченными ресурсами WebEngine можно отключить флагом -skip qtwebengine при конфигурации сборки, что сократит время компиляции на 30–50%.

Для работы с базами данных установите драйверы PostgreSQL и MySQL:

  • libpq-dev (PostgreSQL)
  • libmysqlclient-dev или default-libmysqlclient-dev (MySQL/MariaDB)

При сборке с поддержкой SQLite потребуется libsqlite3-dev. Для работы с Qt Network добавьте libproxy-dev и libb2-dev для поддержки хеширования.

На Windows используйте MSYS2 или vcpkg для установки зависимостей. В MSYS2 выполните:

  • pacman -S --needed base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake
  • Для графики: mingw-w64-x86_64-freetype mingw-w64-x86_64-harfbuzz mingw-w64-x86_64-libjpeg-turbo mingw-w64-x86_64-libpng

В vcpkg зависимости устанавливаются командой vcpkg install --triplet x64-windows qt5-base qt5-declarative. Убедитесь, что переменная PATH содержит пути к компилятору и инструментам сборки.

На macOS установите Xcode и Command Line Tools:

  • xcode-select --install
  • Дополнительно: brew install cmake ninja pkg-config

Для работы с мультимедиа добавьте brew install ffmpeg gstreamer. Если планируется сборка для iOS, установите соответствующие SDK через Xcode.

Проверьте наличие всех зависимостей перед началом сборки. Для Linux используйте ldd на скомпилированных бинарных файлах Qt или скрипт configure, который сообщит о недостающих библиотеках. На Windows проверьте переменные окружения INCLUDE и LIB, чтобы они указывали на каталоги с заголовочными файлами и библиотеками.

Для оптимизации сборки на многоядерных системах установите ninja вместо make. Это ускорит процесс в 2–4 раза за счет параллельной компиляции. На Linux: sudo apt install ninja-build, на macOS: brew install ninja. При конфигурации сборки используйте флаг -ninja для генерации файлов сборки Ninja вместо Makefile.

Загрузка и распаковка исходных кодов Qt

Исходные коды Qt доступны на официальном сайте qt.io в разделе Downloads. Для сборки потребуется архив с полным исходным кодом, а не онлайн-установщик. Выберите версию Qt: LTS (например, 6.5.3) или последнюю стабильную (6.7.0 на момент написания). Скачивайте архив с расширением .tar.xz или .zip – первый компактнее, второй удобнее для Windows. Размер архива варьируется от 800 МБ до 1,2 ГБ в зависимости от версии и формата.

Для Linux и macOS используйте wget или curl для загрузки через терминал. Пример команды для Qt 6.5.3: wget https://download.qt.io/official_releases/qt/6.5/6.5.3/single/qt-everywhere-src-6.5.3.tar.xz. На Windows загрузку проще выполнить через браузер, но убедитесь, что выбран прямой URL без редиректов. Проверьте контрольную сумму SHA-256 после скачивания – она указана на странице загрузки. Это исключит повреждение архива.

Распаковка зависит от ОС. На Linux и macOS используйте tar: tar -xf qt-everywhere-src-6.5.3.tar.xz. На Windows подойдет встроенный архиватор или сторонние инструменты вроде 7-Zip. Избегайте распаковки в пути с пробелами или кириллицей – это может вызвать ошибки при сборке. Рекомендуемый путь: C:\Qt\src для Windows или /opt/qt/src для Linux. Время распаковки на SSD занимает 1–2 минуты, на HDD – до 10 минут.

После распаковки структура каталогов будет следующей: qtbase (ядро Qt), qtdeclarative (QML), qttools (Qt Creator и утилиты). Не пытайтесь собирать Qt из корневой директории – всегда переходите в подкаталог qtbase для конфигурации. Если требуются дополнительные модули (например, qtwebengine), их исходники уже включены в архив, но сборка выполняется отдельно.

Перед началом сборки убедитесь, что на диске достаточно места: минимально – 10 ГБ, оптимально – 20 ГБ. Qt генерирует временные файлы и объектные модули, которые занимают в 2–3 раза больше исходного архива. Для ускорения процесса используйте RAM-диск (если доступно более 16 ГБ ОЗУ) или SSD с высокой скоростью записи. На системах с ограниченными ресурсами отключите сборку ненужных модулей через параметры configure.

Настройка параметров конфигурации перед сборкой

Перед запуском скрипта configure определите целевую архитектуру и набор модулей Qt. Для x86_64 с поддержкой OpenGL и Qt Quick используйте флаги -platform linux-g++ -opengl desktop -qt-quick. Исключите ненужные компоненты: -skip qtwebengine -skip qt3d сократит время сборки на 30–40%. Для статической линковки добавьте -static -static-runtime, но учтите, что размер бинарных файлов увеличится в 2–3 раза. При сборке для встраиваемых систем укажите -device linux-rasp-pi4-g++ и путь к тулчейну через -device-option CROSS_COMPILE=.

Оптимизируйте производительность с помощью -optimized-qmake -release -strip, а для отладки оставьте -debug. Включите поддержку ICU для полноценной работы с Unicode: -icu -I /usr/local/icu/include -L /usr/local/icu/lib. Если требуется интеграция с Python, добавьте -qt-python-binding и укажите путь к интерпретатору через -python-path. Проверьте зависимости заранее: pkg-config --modversion openssl должен возвращать версию не ниже 1.1.1.

Запуск процесса компиляции и оптимизация времени сборки

Запуск компиляции Qt из исходников начинается с команды make или ninja, в зависимости от выбранного генератора. Если при конфигурации использовался CMake с флагом -G "Ninja", сборка пройдет быстрее за счет параллельной обработки задач. Для make укажите количество потоков через -jN, где N – число ядер процессора плюс один (например, -j9 для 8-ядерного CPU). На системах с ограниченной оперативной памятью уменьшите значение, чтобы избежать сбоев из-за нехватки ОЗУ.

Оптимизировать время сборки можно за счет предварительной настройки окружения. Исключите ненужные модули Qt через параметры конфигурации, например, -skip qtwebengine -skip qt3d, если они не требуются. Для ускорения повторных сборок используйте ccache, предварительно установив его и добавив в переменные окружения PATH. На Linux это сокращает время пересборки до 90% при изменении отдельных файлов.

  • Отключите отладочные символы для релизной сборки: -release -no-debug-info. Это уменьшает размер бинарных файлов и ускоряет линковку.
  • Используйте SSD для хранения исходников и временных файлов – разница в скорости по сравнению с HDD достигает 30-40%.
  • На Windows с MSVC добавьте флаг /MP для параллельной компиляции исходников в одном проекте.
  • Для сборки под Android или iOS заранее подготовьте кросс-компиляционные тулчейны, чтобы избежать их загрузки во время процесса.

Мониторинг процесса сборки поможет выявить узкие места. На Linux используйте time make -jN для оценки общего времени, а htop – для анализа загрузки CPU и ОЗУ. Если сборка зависает на определенном модуле, прервите её (Ctrl+C) и перезапустите с флагом -k для продолжения с места ошибки. На Windows аналогичную информацию предоставляет Диспетчер задач или Process Explorer.

После успешной сборки выполните make install или ninja install, чтобы скопировать бинарные файлы в целевую директорию. Для дальнейшей оптимизации времени запуска приложений Qt добавьте пути к библиотекам в LD_LIBRARY_PATH (Linux) или PATH (Windows). На macOS используйте install_name_tool для исправления путей в бинарниках, если сборка проводилась в нестандартной директории.

Устранение ошибок компиляции и диагностика проблем

Ошибка Причина Решение
error: C2065: 'Q_OS_WIN': undeclared identifier Неправильная генерация метаинформации компилятором Очистите сборку (`git clean -dfx`), перезапустите configure с флагом -recheck-all
fatal error: X11/Xlib.h: No such file Отсутствуют заголовки X11 Установите пакет libx11-dev (Debian) или libX11-devel (Fedora)
error: LNK1181: cannot open input file 'opengl32.lib' Не найдена библиотека OpenGL на Windows Укажите путь к SDK в configure: -opengl desktop -I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um"

Для диагностики используйте инструменты: strace (Linux) для отслеживания системных вызовов, Process Monitor (Windows) для анализа обращений к файлам/реестру, или qmake -query для проверки путей Qt. При ошибках линковки добавьте флаг -linker-flags "-Wl,--verbose" в configure, чтобы увидеть детали компоновки. Если сборка зависает на этапе moc, проверьте наличие циклических зависимостей в заголовочных файлах – временно удалите подозрительные #include и пересоберите.

Установка собранных библиотек и инструментов Qt

Настройте переменные окружения, чтобы инструменты Qt были доступны глобально. Добавьте в ~/.bashrc или /etc/environment следующие строки:

export PATH="/usr/local/qt6/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/qt6/lib:$LD_LIBRARY_PATH"
export QT_DIR="/usr/local/qt6"

Для применения изменений выполните source ~/.bashrc или перезагрузите сессию. Если используете CMake, укажите путь к Qt через -DCMAKE_PREFIX_PATH=/usr/local/qt6 при конфигурации проекта.

При сборке с модулями (например, QtWebEngine или QtCharts) проверьте их наличие в qtbase/qml и qtbase/plugins. Для корректной работы QML-приложений скопируйте содержимое qml в /usr/local/qt6/qml, а плагины – в /usr/local/qt6/plugins. Если при запуске возникают ошибки типа "module not found", укажите путь к QML-файлам через переменную QML2_IMPORT_PATH или параметр -qmlimport в qmlscene. Для статической сборки Qt добавьте флаг -static при конфигурации и пересоберите зависимости.

Проверка работоспособности и тестирование собранной версии

Создайте минимальный проект для проверки: qmake -project && qmake && make (Linux/macOS) или nmake (Windows). Если компиляция завершится ошибками, сравните версии компилятора и Qt – например, MinGW 11.2 требует Qt 6.5+, а MSVC 2022 совместим только с Qt 6.4+. Запустите сгенерированный бинарник и убедитесь, что окно приложения отображается без артефактов. На Linux дополнительно проверьте зависимости через ldd ./app – все библиотеки Qt должны разрешаться из директории сборки, а не системных путей.

Для углубленного тестирования используйте встроенные инструменты Qt: qtbase/tests/auto содержит модульные тесты для ядра, а make check (если сборка конфигурировалась с -developer-build) запустит полный набор регрессионных тестов. На Windows запускайте тесты через ctest -C Release в папке сборки. Обратите внимание на предупреждения о несовпадении ABI – например, если Qt собран с -platform win32-msvc, а компилятор использует /std:c++20, возможны сбои при линковке. При обнаружении ошибок в тестах проверьте лог сборки на наличие пропущенных зависимостей (например, OpenSSL для модуля QtNetwork) и пересоберите с флагом -recheck-all.

Вопрос-ответ:

Ссылка на основную публикацию