Building Qt 5 from Git/ru

From Qt Wiki
Jump to: navigation, search
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

Русский English 简体中文 Български Français


Сборка Qt 5 из Git

Введение

В этой статье мы попытаемся дать некоторые объяснения касательно получения модулей Qt 5 из git и способы последующей их сборки. Не стесняйтесь обновлять эту статью, некоторые вещи изменяются во время разработки. Обсуждение проблем и их решения можно найти в ветке форума http://developer.qt.nokia.com/forums/viewthread/7018 (на английском).

Требования к системе

Вам очевидно потребуется git (>= 1.6.x) для получения пакетов.

Чтобы правильно сконфигурировать и собрать Qt 5 из исходных текстов, вам будут необходимы Perl (>=5.14) и Python (>=2.6.x), а так-же рабочий компилятор.

Для включения поддержки SSL в QT посмотрите: http://doc.qt.io/qt-5.0/qtnetwork/ssl.html

Linux/X11

Основы сборки

Ubuntu/Debian:

sudo apt-get install build-essential perl python git

Libxcb [xcb.freedesktop.org]: теперь является бэкэндом оконной системы по умолчанию для платформ на основе X11/Xorg, и поэтому вы должны установить libxcb и его сопроводительные пакеты. Qt5 может быть собран с любой libxcb версией, доступной в дистрибутивных пакетах (но вы можете дополнительно использовать v1.8 или выше, чтобы распараллелить поддержку рендеринга). src/plugins/platforms/xcb/README [code.qt.io]: перечисляет требуемые пакеты.

Libxcb

Ubuntu/Debian:

sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev

Fedora 16 и выше:

su - -c "yum install libxcb libxcb-devel xcb-util xcb-util-devel"

Fedora 17+ (xcb-util-renderutil в настоящее время доступно в обновлениях тестового репозитария, но пока работает не устойчиво):

su - -c "yum —enablerepo=updates-testing install libxcb libxcb-devel xcb-util xcb-util-devel xcb-util-'''-devel"

Команда установки perl-version для Fedora

su - -c "yum install perl-version"

ArchLinux:

sudo pacman -S needed libxcb xcb-proto xcb-util xcb-util-image xcb-util-wm

На Linux Chakra, кроме пакетов, упомянутых для ArchLinux, вы должны дополнительно установить пакет xcb-util-keysyms. Этот пакет доступен из CCR.

Mandriva/ROSA/Unity:

urpmi 'pkgconfig(xcb)' 'pkgconfig(xcb-icccm)' 'pkgconfig(xcb-image)' 'pkgconfig(xcb-renderutil)'
      'pkgconfig(xcb-keysyms)' 'pkgconfig(xrender)'

Поддержка OpenGL

Для QtQuick2 настоятельно рекомендуется графический драйвер с собственной поддержкой OpenGL 2.0.

QtJsonDb

QtJsonDb зависит от libedit:

Ubuntu/Debian:

sudo apt-get install libedit-dev

Mandriva/ROSA/Unity:

urpmi 'pkgconfig(libedit)'

Qt WebKit

Перед тем как компилировать webkit, вам потребуется установить следующие зависимые пакеты:

Ubuntu/Debian:

sudo apt-get install flex bison gperf libicu-dev libxslt-dev

Fedora:

su- -c "yum install gperf"

Mandriva/ROSA/Unity:

urpmi gperf

QtWayland зависимости

Для сборки модуля QtWayland, должны быть установлены библиотеки разработки Wayland [wayland.freedesktop.org]: (libxcomposite-dev и libwayland-dev).

Mac OS X

XCode и GIT должно быть достаточно.

Windows

Графические драйверы Windows

Для работы QML2 потребуются драйвера OpenGL (Nvidia, и т.д.), с поддержкой OpenGL 2.1 или выше для вашей видеокарты. По умолчанию, в Windows установлены драйвера с поддержкой OpenGL 1.1, которой будет недостаточно.

Альтернативой может служить, ANGLE-library [code.google.com], которая обеспечивает, Open GL ES 2.0, переводящая вызовы Open_GL в Direct X. Чтобы создать её, вы должны проделать следующее:

  1. установить Direct X SDK [msdn.microsoft.com]:
  2. получить и скомпилировать ANGLE (из SVN репозитория) как описано на этой странице [code.google.com]:
  3. Примечание: При сборке для 64х битных систем, деактивируйте опцию WarnAsError в каждом файле проекта (поскольку в противном случае предупреждения о целочисленных преобразованиях повредят сборку).
  4. При конфигурировании Qt передайте в параметры командной строки -opengl es2 -angle <path>

Поддерживаемые компиляторы на Windows

  • Windows SDK 7.1 с Visual Studio 2010 (предпочтительно). С 16.03.2012, при установке SDK потребуется установка пакетов в следующем порядке (см. readme.html предоставленный пакетом обновления):
  1. Установка Visual Studio 2010
  2. Установка Windows SDK 7.1
  3. Установка Visual Studio 2010 SP1
  4. Установка Visual C++ 2010 SP1 Обновление компилятора для Windows SDK 7.1
  • Windows SDK 7 с Visual Studio 2008
  • Windows Kit 8 with Visual Studio 2012
  • MinGW [mingw.org] или TDM MinGW (64bit) [tdm-gcc.tdragon.net] с g++ версии 4.6 или выше (поддерживается не всеми модулями)

Среда сборки Windows

Мы рекомендуем создать файл командной строки, который предоставит среду сборки (см. Qt Creator README [code.qt.io]). В этой среде Python (например, Active Python 2.7 или старше) и Perl (например, Active State Perl 5.12 или старше) должны быть указаны в переменной среды PATH.
Скачать Perl: http://www.activestate.com/activeperl/downloads [activestate.com]
Скачать Python: http://www.python.org/download/releases/ [python.org]
Скачать Ruby:http://rubyinstaller.org/downloads/ [rubyinstaller.org]

Подсказка: Удостоверьтесь, что Perl описан в пути PATH перед git, так как последний имеет устаревшую версию (Perl 5. 8), и может прервать работу сценария.

Многопроцессорная сборка: При использовании nmake, может быть установлена переменная окружения CL (опция компилятора Visual Studio) set CL=/MP, давая компилятору команду использовать все ядра. Альтернативно, может использоваться инструмент jom [wiki.qt.io]. Однако, надо отметить, что у него есть проблемы с взаимозависимостями модуля, которые могут прервать сборку.

ICU на Windows

Qt 5 может использовать библиотеку ICU [site.icu-project.org] для UNICODE и поддержки глобализации. Это требуется для создания QtWebKit.

Во время компиляции include и lib папки установки ICU должны быть добавлены к INCLUDE и LIB переменным окружения после вызова сценария установки SDK Windows.

Во время выполнения ICU должны быть найдены DLL библиотеки. Это может быть достигнуто, с помощью копирования DLL в папку приложения или добавления папки bin установленного ICU в переменную окружения PATH.


Получение исходного кода

Сначала клонируйте верхний уровень git репозитария Qt 5:

git clone git://code.qt.io/qt/qt5.git qt5

или (если вы находитесь за межсетевым экраном можно использовать https протокол):

git clone https://code.qt.io/qt/qt5.git qt5

После прочтения README [code.qt.io] - файла, мы инициализируем репозиторий, используя сценарий init-repository, который клонирует различные подмодули Qt5. Соответствующие опции:

  • --no-webkit: позволяет не загружать qtwebkit, при передаче этой опции. Этот модуль довольно большой, компиляция занимает много времени и часто является источником ошибок. Таким образом, рекомендуется загружать и собирать его, только если намереваетесь использовать. В дальнейшем вы всегда можете повторно выполнить init-repository, чтобы добавить этот подмодуль.
  • --http: передайте эту опцию, если находитесь позади брандмауэра.
cd qt5
perl init-repository

Если вы планируете участвовать в развитии Qt, вы должны определить codereview-username свое имя пользователя, это необходимо для того чтобы отделить особенности вашей версии:

perl init-repository --codereview-username <Jira/Gerrit username>

Конфигурирование и сборка

Установите путь так, чтобы использовать инструменты Qt5, а не старые Qt4 и прочие, которые могут присутствовать в системе:

Для Linux/Mac OS X:

unset QTDIR
export PATH="$PWD/qtbase/bin:$PWD/qtrepotools/bin:$PATH"

Для Windows:

set QTDIR=
set PATH=%CD%\qtbase\bin;%CD%\qtrepotools\bin;%PATH%

Теперь сконфигурируйте сборку (из директории верхнего уровня). Отключение тестов tests и примеров examples значительно ускорит компиляцию:

Для Linux/Mac OS X:

./configure -developer-build -opensource -nomake examples -nomake tests

Для Windows:

configure -developer-build -opensource -nomake examples -nomake tests
  • -developer-build - эта опция экспортирует больше символов, чем в традиционной сборке Qt, что позволяет большему количеству классов и функций быть протестированными модулем. Это также значение по умолчанию для сборки отладочной версии и установки двоичных файлов в текущем каталоге, и позволяет избежать потребности в 'make install'.
  • -opensource - устанавливает лицензию LGPL 2.1.
  • -nomake examples и -nomake tests - исключение из сборки тестов и примеров. В дальнейшем вы всегда можете собрать их отдельно.

Подсказка 1: На Linux вы должны также передать параметр -no-gtkstyle. Это вызвано тем, что в ряде систем (по крайней мере, SUSE и Gentoo) pkg-config —cflags gtk+–2.0 фактически возвращает пути, которые включают в систему Qt4.x-include каталоги.

Подсказка 2: Можете добавить -confirm-license, чтобы принять лицензию и избавиться от вопроса о ее принятии.

Подсказка 3: На Windows вы не в состоянии осуществить сборку, если sh.exe находится в PATH (например, из-за установленного git или msys). Такая ошибка обозначается в сообщениях qt5-srcqtbasebinqmake.exe: command not found и подобных. В этом случае удостоверьтесь, что sh.exe не указан в переменной PATH. Вы должны будете вновь сконфигурировать сборку, в случае если вы его удалили.

Запускаем сборку, вызывая build perl сценарий:

Для Linux:

./build -j 3

Для Windows (MSVC):

perl build

Или просто соберите определенный модуль, например, declarative, и модули, от которых он зависит:

make module-qtdeclarative

Подсказка 1: build сценарий используется для сборки всей конфигурации. Для сборки модулей из каталогов с исходниками, вы можете выполнять команду make. Это тоже работает. Подсказка 2: jom, низкоуровневая замена nmake на Windows, она пока не правильно работает для высокоуровневых сборок. Однако, вы можете использовать его для (пере-)создания отдельных подмодулей.

Сборка QtWebKit

Linux, Mac

Для сборки потребуются инструменты bison, flex и gperf.

cd qtwebkit
export WEBKITOUTPUTDIR="$PWD/WebKitBuild"
perl Tools/Scripts/build-webkit --qt --qmake="$PWD/../qtbase/bin/qmake" --install-libs=<install dir> --debug 
     --makeargs="$MAKEFLAGS"

Windows

На сайте WebKit.org [trac.webkit.org] вы найдете инструкции для создания WebKit на Windows. Кроме того потребуются библиотеки ICU [site.icu-project.org] и phtreads-win32 [sourceware.org]. После распаковки пакета (в папку c:), необходимо сделать следующее:

  • Добавить c:\phtreads\pthreads.2 в переменную окружения INCLUDE
  • Добавить c:\phtreads\Pre-built.2\lib\x64 или c:\phtreads\Pre-built.2\lib\x86 в переменную окружения LIB
  • Добавить c:\phtreads\Pre-built.2\dll\x64 или c:\phtreads\Pre-built.2\dllx86 в переменную окружения PATH

Инструменты bison, flex и gperf, которые требуются для сборки, предусмотрительно размещены в папке gnuwin32\bin.

set PATH=%PATH%;%CD%\gnuwin32\bin
cd qtwebkit
set WEBKITOUTPUTDIR=%CD%\WebKitBuild
perl Tools\Scripts\build-webkit --qt --qmake="%CD%\\..\\qtbase\\bin\\qmake.exe" --install-libs=<install dir> 
     --release --makeargs="%MAKEFLAGS%"

Установка (Linux / Mac OS X)

Примечание: Установка будет необходима только если вы не использовали опции -developer-build или -prefix "%PWD%/qtbase". В противном случае вы можете просто пользоваться Qt из каталога сборки.

Для установки, выполните

make install

Но если вы желаете провести установку в нестандартный каталог, для того чтобы протестировать Qt5, вам необходимо описать где будет находиться каталог bin вашей установки в переменной PATH. Также вы должны или удостовериться, что не имеете переменнной среды QTDIR, или опишите в этой переменной путь установки перед тем как будете выполнять make install. Например, при установке в /opt/qt5 (это предполагает, использование bash; для csh-подобных оболочек вы должны будете сначала выполнить setenv эквиваленты):

PATH=/opt/qt5:$PATH QTDIR=/opt/qt5 make install

Очистка

Для получения действительно чистого дерева используйте:

git submodule foreach --recursive 'git clean -dfx'

с некоторых пор, confclean, больше не работает из верхнего уровня репозитария.

Получение обновлений

Чтобы обновить qt5.git репозитарий, а также подмодули до последних известных протестированных версий, выполните

git pull
git submodule update --recursive

Если вы планируете делать ночные сборки, рассмотрите использование сценария qt5_tool, который находится в qtrepotools/bin. Этот сценарий предоставляет возможность обновления репозитария, очистки и сборки. Например,

qt5_tool -u -c -b

может использоваться, чтобы очистить, обновить и собрать. А

qt5_tool -p -c- b

используется для того чтобы получить все головные модули и их основные ответвления.

  • Подсказка 1: git submodule update делает "жесткий" сброс подмодулей, потенциально избавляя от любых нежелательных изменений которые вы сделали! Если это произошло с вами (и вы не работали с персональными ответвлениями), git reflog, ваш друг….
  • Подсказка 2: При создании сценариев для обновлений на Windows отметьте, что git clean часто сбоит, если какой либо процесс блокирует файл или папку.

Использование основных ответвлений в подмодулях

По умолчанию checkout не будет содержать последние основные ответвления каждого отдельного репозитария подмодуля, но содержит комбинацию версий, которые зависят друг от друга. Если требуется получить абсолютно последний материал, можете сделать например так:

cd qtdeclarative
git fetch
git checkout master origin/master

или используйте qt5_tool, чтобы обновить все репозитарии:

./qtrepotools/bin/qt5_tool -p

Однако, всегда есть шанс, что компиляция перестанет работать из-за несовместимых версий подмодулей! В таком случае, вы можете спросить у других людей, активно работающих над модулем, как разрешить эти несовместимости.

Известные проблемы

Linux

сбой конфигурации с "No QPA platform plugin enabled! " (Linux)

Вам необходимо установить libxcb, и его зависимые пакеты, см. 'Системные требования'.

qmlscene сообщение об ошибке "Cannot create platform GL context, none of GLX, EGL, DRI2 is enabled" (Linux)

Попытайтесь установить libx11-xcb-dev пакет:

sudo apt-get install libx11-xcb-dev

впоследствии вы должны повторно выполнить configure qtbase/src/plugins/platforms/xcb с опцией force для перекомпиляции.

WebKit не собирается при недостающем ICU

В настоящее время не конфигурируется проверка времени для ICU, так установите его через диспетчер пакетов.

для Ubuntu/Debian:

sudo apt-get install libicu-dev

для Fedora:

yum search ICU

Альтернативно можете собрать Qt без webkit, удалив или переименовав qtwebkit, qtwebkit-examples-and-demos каталоги. -no-webkit опция конфигуратора еще не работает: https://bugreports.qt.io/browse/QTBUG-20577

Windows

qdeclarative не компилируется из-за без вести пропавших v8.lib (Windows)

Компиляция v8 в qtbase требует Python. Удостоверьтесь что python.exe прописан в переменной окружения % PATH% перейдите в каталог qtjsbackend, выполните qmake && nmake.

Проблема с отладкой OpenGL (Windows)

Установите переменную окружения
QT_QPA_VERBOSE=gl:1
и запустите приложение с установленным DebugView. Журнал покажет требуемый по сравнению с полученной версией OpenGL. Если в логах журнала обнаружится что у него только OpenGL 1.1, то QML2 не будет работать. Обратите внимание на то, что qmlscene не будет сообщать об ошибках не поддерживаемых версий OpenGL.

Вопросы и комментарии