Building Qt 5 from Git/ru: Difference between revisions
m (EdwardWelbourne moved page Building Qt from Git/ru to Building Qt 5 from Git/ru over redirect: hmm ... no, someone already apparently sorted out the Qt 6 version of this.) |
m (Fix link to README) |
||
Line 7: | Line 7: | ||
= Сборка Qt 5 из Git = | =Сборка Qt 5 из Git= | ||
== Введение == | ==Введение== | ||
В этой статье мы попытаемся дать некоторые объяснения касательно получения модулей Qt 5 из git и способы последующей их сборки. Не стесняйтесь обновлять эту статью, некоторые вещи изменяются во время разработки. Обсуждение проблем и их решения можно найти в ветке форума http://developer.qt.nokia.com/forums/viewthread/7018 (на английском). | В этой статье мы попытаемся дать некоторые объяснения касательно получения модулей Qt 5 из git и способы последующей их сборки. Не стесняйтесь обновлять эту статью, некоторые вещи изменяются во время разработки. Обсуждение проблем и их решения можно найти в ветке форума http://developer.qt.nokia.com/forums/viewthread/7018 (на английском). | ||
== Требования к системе == | ==Требования к системе== | ||
Вам очевидно потребуется git ('''>= 1.6.x''') для получения пакетов. | Вам очевидно потребуется git ('''>= 1.6.x''') для получения пакетов. | ||
Line 21: | Line 21: | ||
Для включения поддержки SSL в QT посмотрите: http://doc.qt.io/qt-5.0/qtnetwork/ssl.html | Для включения поддержки SSL в QT посмотрите: http://doc.qt.io/qt-5.0/qtnetwork/ssl.html | ||
=== Linux/X11 === | ===Linux/X11=== | ||
==== Основы сборки ==== | ====Основы сборки==== | ||
''Ubuntu/Debian:'' | ''Ubuntu/Debian:'' | ||
Line 34: | Line 34: | ||
[http://code.qt.io/qt/qtbase/blobs/master/src/plugins/platforms/xcb/README src/plugins/platforms/xcb/README] ''[code.qt.io]'': перечисляет требуемые пакеты. | [http://code.qt.io/qt/qtbase/blobs/master/src/plugins/platforms/xcb/README src/plugins/platforms/xcb/README] ''[code.qt.io]'': перечисляет требуемые пакеты. | ||
==== Libxcb ==== | ====Libxcb==== | ||
''Ubuntu/Debian:'' | ''Ubuntu/Debian:'' | ||
Line 51: | Line 51: | ||
<code> | <code> | ||
su - -c "yum —enablerepo=updates-testing install libxcb libxcb-devel xcb-util xcb-util-devel xcb-util-'''-devel" | su - -c "yum —enablerepo=updates-testing install libxcb libxcb-devel xcb-util xcb-util-devel xcb-util-'''-devel"''' | ||
</code> | </code> | ||
Line 73: | Line 73: | ||
urpmi 'pkgconfig(xcb)' 'pkgconfig(xcb-icccm)' 'pkgconfig(xcb-image)' 'pkgconfig(xcb-renderutil)' | urpmi 'pkgconfig(xcb)' 'pkgconfig(xcb-icccm)' 'pkgconfig(xcb-image)' 'pkgconfig(xcb-renderutil)' | ||
'pkgconfig(xcb-keysyms)' 'pkgconfig(xrender)' | 'pkgconfig(xcb-keysyms)' 'pkgconfig(xrender)' | ||
</code> | </code> | ||
==== Поддержка OpenGL ==== | ====Поддержка OpenGL==== | ||
Для QtQuick2 настоятельно рекомендуется графический драйвер с собственной поддержкой OpenGL 2.0. | Для QtQuick2 настоятельно рекомендуется графический драйвер с собственной поддержкой OpenGL 2.0. | ||
==== QtJsonDb ==== | ====QtJsonDb==== | ||
QtJsonDb зависит от libedit: | QtJsonDb зависит от libedit: | ||
Line 95: | Line 96: | ||
</code> | </code> | ||
==== Qt WebKit ==== | ====Qt WebKit==== | ||
Перед тем как компилировать webkit, вам потребуется установить следующие зависимые пакеты: | Перед тем как компилировать webkit, вам потребуется установить следующие зависимые пакеты: | ||
Line 117: | Line 118: | ||
</code> | </code> | ||
==== QtWayland зависимости ==== | ====QtWayland зависимости==== | ||
Для сборки модуля QtWayland, должны быть установлены библиотеки разработки [http://wayland.freedesktop.org/ Wayland] ''[wayland.freedesktop.org]'': ('''libxcomposite-dev''' и '''libwayland-dev'''). | Для сборки модуля QtWayland, должны быть установлены библиотеки разработки [http://wayland.freedesktop.org/ Wayland] ''[wayland.freedesktop.org]'': ('''libxcomposite-dev''' и '''libwayland-dev'''). | ||
=== Mac OS X === | ===Mac OS X=== | ||
XCode и GIT должно быть достаточно. | XCode и GIT должно быть достаточно. | ||
=== Windows === | ===Windows=== | ||
==== Графические драйверы Windows ==== | ====Графические драйверы Windows==== | ||
Для работы QML2 потребуются драйвера OpenGL (Nvidia, и т.д.), с поддержкой OpenGL 2.1 или выше для вашей видеокарты. По умолчанию, в Windows установлены драйвера с поддержкой OpenGL 1.1, которой будет недостаточно. | Для работы QML2 потребуются драйвера OpenGL (Nvidia, и т.д.), с поддержкой OpenGL 2.1 или выше для вашей видеокарты. По умолчанию, в Windows установлены драйвера с поддержкой OpenGL 1.1, которой будет недостаточно. | ||
Line 133: | Line 134: | ||
Альтернативой может служить, [http://code.google.com/p/angleproject/ ANGLE-library] ''[code.google.com]'', которая обеспечивает, Open GL ES 2.0, переводящая вызовы Open_GL в ''Direct X''. Чтобы создать её, вы должны проделать следующее: | Альтернативой может служить, [http://code.google.com/p/angleproject/ ANGLE-library] ''[code.google.com]'', которая обеспечивает, Open GL ES 2.0, переводящая вызовы Open_GL в ''Direct X''. Чтобы создать её, вы должны проделать следующее: | ||
# установить [http://msdn.microsoft.com/en-us/directx/default.aspx Direct X SDK] ''[msdn.microsoft.com]'': | #установить [http://msdn.microsoft.com/en-us/directx/default.aspx Direct X SDK] ''[msdn.microsoft.com]'': | ||
# получить и скомпилировать ANGLE (из SVN репозитория) как описано на этой [http://code.google.com/p/angleproject/wiki/DevSetup странице] ''[code.google.com]'': | #получить и скомпилировать ANGLE (из SVN репозитория) как описано на этой [http://code.google.com/p/angleproject/wiki/DevSetup странице] ''[code.google.com]'': | ||
# Примечание: При сборке для 64х битных систем, деактивируйте опцию ''WarnAsError'' в каждом файле проекта (поскольку в противном случае предупреждения о целочисленных преобразованиях повредят сборку). | #Примечание: При сборке для 64х битных систем, деактивируйте опцию ''WarnAsError'' в каждом файле проекта (поскольку в противном случае предупреждения о целочисленных преобразованиях повредят сборку). | ||
# При конфигурировании Qt передайте в параметры командной строки ''-opengl es2 -angle <path>'' | #При конфигурировании Qt передайте в параметры командной строки ''-opengl es2 -angle <path>'' | ||
==== Поддерживаемые компиляторы на Windows ==== | ====Поддерживаемые компиляторы на Windows==== | ||
* ''Windows SDK 7.1 с Visual Studio 2010'' (предпочтительно). С 16.03.2012, при установке SDK потребуется установка пакетов в следующем порядке (см. readme.html предоставленный пакетом обновления): | *''Windows SDK 7.1 с Visual Studio 2010'' (предпочтительно). С 16.03.2012, при установке SDK потребуется установка пакетов в следующем порядке (см. readme.html предоставленный пакетом обновления): | ||
# Установка Visual Studio 2010 | #Установка Visual Studio 2010 | ||
# Установка Windows SDK 7.1 | #Установка Windows SDK 7.1 | ||
# Установка Visual Studio 2010 SP1 | #Установка Visual Studio 2010 SP1 | ||
# Установка Visual C++ 2010 SP1 Обновление компилятора для Windows SDK 7.1 | #Установка Visual C++ 2010 SP1 Обновление компилятора для Windows SDK 7.1 | ||
* ''Windows SDK 7 с Visual Studio 2008'' | *''Windows SDK 7 с Visual Studio 2008'' | ||
* ''Windows Kit 8 with Visual Studio 2012'' | *''Windows Kit 8 with Visual Studio 2012'' | ||
* [http://www.mingw.org/ MinGW] ''[mingw.org]'' или [http://tdm-gcc.tdragon.net/ TDM MinGW (64bit)] ''[tdm-gcc.tdragon.net]'' с ''g++'' версии 4.6 или выше (поддерживается не всеми модулями) | *[http://www.mingw.org/ MinGW] ''[mingw.org]'' или [http://tdm-gcc.tdragon.net/ TDM MinGW (64bit)] ''[tdm-gcc.tdragon.net]'' с ''g++'' версии 4.6 или выше (поддерживается не всеми модулями) | ||
==== Среда сборки Windows ==== | ====Среда сборки Windows==== | ||
Мы рекомендуем создать файл командной строки, который предоставит среду сборки (см. [http://code.qt.io/qt-creator/qt-creator/blobs/master/README Qt Creator README] ''[code.qt.io]''). В этой среде ''Python'' (например, ''Active Python 2.7'' или старше) и ''Perl'' (например, ''Active State Perl 5.12'' или старше) должны быть указаны в переменной среды ''PATH''. | Мы рекомендуем создать файл командной строки, который предоставит среду сборки (см. [http://code.qt.io/qt-creator/qt-creator/blobs/master/README Qt Creator README] ''[code.qt.io]''). В этой среде ''Python'' (например, ''Active Python 2.7'' или старше) и ''Perl'' (например, ''Active State Perl 5.12'' или старше) должны быть указаны в переменной среды ''PATH''. | ||
Line 165: | Line 166: | ||
'''Многопроцессорная сборка''': При использовании ''nmake'', может быть установлена переменная окружения ''CL'' (опция компилятора Visual Studio) ''set CL=/MP'', давая компилятору команду использовать все ядра. Альтернативно, может использоваться инструмент [http://wiki.qt.io/jom jom] ''[wiki.qt.io]''. Однако, надо отметить, что у него есть проблемы с взаимозависимостями модуля, которые могут прервать сборку. | '''Многопроцессорная сборка''': При использовании ''nmake'', может быть установлена переменная окружения ''CL'' (опция компилятора Visual Studio) ''set CL=/MP'', давая компилятору команду использовать все ядра. Альтернативно, может использоваться инструмент [http://wiki.qt.io/jom jom] ''[wiki.qt.io]''. Однако, надо отметить, что у него есть проблемы с взаимозависимостями модуля, которые могут прервать сборку. | ||
==== ICU на Windows ==== | ====ICU на Windows==== | ||
Qt 5 может использовать библиотеку [http://site.icu-project.org/ ICU] ''[site.icu-project.org]'' для UNICODE и поддержки глобализации. Это '''требуется''' для создания QtWebKit. | Qt 5 может использовать библиотеку [http://site.icu-project.org/ ICU] ''[site.icu-project.org]'' для UNICODE и поддержки глобализации. Это '''требуется''' для создания QtWebKit. | ||
Line 174: | Line 175: | ||
== Получение исходного кода == | ==Получение исходного кода== | ||
Сначала клонируйте верхний уровень git репозитария Qt 5: | Сначала клонируйте верхний уровень git репозитария Qt 5: | ||
Line 188: | Line 189: | ||
</code> | </code> | ||
После прочтения [ | После прочтения [https://code.qt.io/cgit/qt/qt5.git/tree/README.git README] ''[code.qt.io]'' - файла, мы инициализируем репозиторий, используя сценарий ''init-repository'', который клонирует различные подмодули Qt5. Соответствующие опции: | ||
<br /> | <br /> | ||
* --module-subset=default,-qtwebengine: позволяет не загружать qtwebengine при передаче этой опции. Этот модуль довольно большой, компиляция занимает много времени и часто является источником ошибок. Таким образом, рекомендуется загружать и собирать его, только если намереваетесь использовать. В дальнейшем вы всегда можете повторно выполнить init-repository, чтобы добавить этот подмодуль. | |||
* ''--http'': передайте эту опцию, если находитесь позади брандмауэра. | *--module-subset=default,-qtwebengine: позволяет не загружать qtwebengine при передаче этой опции. Этот модуль довольно большой, компиляция занимает много времени и часто является источником ошибок. Таким образом, рекомендуется загружать и собирать его, только если намереваетесь использовать. В дальнейшем вы всегда можете повторно выполнить init-repository, чтобы добавить этот подмодуль. | ||
*''--http'': передайте эту опцию, если находитесь позади брандмауэра. | |||
<code> | <code> | ||
Line 204: | Line 206: | ||
</code> | </code> | ||
== Конфигурирование и сборка == | ==Конфигурирование и сборка== | ||
Установите путь так, чтобы использовать инструменты Qt5, а не старые Qt4 и прочие, которые могут присутствовать в системе: | Установите путь так, чтобы использовать инструменты Qt5, а не старые Qt4 и прочие, которые могут присутствовать в системе: | ||
Line 236: | Line 238: | ||
</code> | </code> | ||
* ''-developer-build'' - эта опция экспортирует больше символов, чем в традиционной сборке Qt, что позволяет большему количеству классов и функций быть протестированными модулем. Это также значение по умолчанию для сборки отладочной версии и установки двоичных файлов в текущем каталоге, и позволяет избежать потребности в 'make install'. | *''-developer-build'' - эта опция экспортирует больше символов, чем в традиционной сборке Qt, что позволяет большему количеству классов и функций быть протестированными модулем. Это также значение по умолчанию для сборки отладочной версии и установки двоичных файлов в текущем каталоге, и позволяет избежать потребности в 'make install'. | ||
* ''-opensource'' - устанавливает лицензию LGPL 2.1. | *''-opensource'' - устанавливает лицензию LGPL 2.1. | ||
* ''-nomake examples'' и ''-nomake tests'' - исключение из сборки тестов и примеров. В дальнейшем вы всегда можете собрать их отдельно. | *''-nomake examples'' и ''-nomake tests'' - исключение из сборки тестов и примеров. В дальнейшем вы всегда можете собрать их отдельно. | ||
'''Подсказка 1:''' На Linux вы должны также передать параметр ''-no-gtkstyle''. Это вызвано тем, что в ряде систем (по крайней мере, SUSE и Gentoo) ''pkg-config —cflags gtk+–2.0'' фактически возвращает пути, которые включают в систему Qt4.x-include каталоги. | '''Подсказка 1:''' На Linux вы должны также передать параметр ''-no-gtkstyle''. Это вызвано тем, что в ряде систем (по крайней мере, SUSE и Gentoo) ''pkg-config —cflags gtk+–2.0'' фактически возвращает пути, которые включают в систему Qt4.x-include каталоги. | ||
Line 269: | Line 271: | ||
'''Подсказка 2:''' ''jom'', низкоуровневая замена nmake на Windows, она пока не правильно работает для высокоуровневых сборок. Однако, вы можете использовать его для (пере-)создания отдельных подмодулей. | '''Подсказка 2:''' ''jom'', низкоуровневая замена nmake на Windows, она пока не правильно работает для высокоуровневых сборок. Однако, вы можете использовать его для (пере-)создания отдельных подмодулей. | ||
=== Сборка QtWebKit === | ===Сборка QtWebKit=== | ||
''Linux, Mac'' | ''Linux, Mac'' | ||
Line 280: | Line 282: | ||
perl Tools/Scripts/build-webkit --qt --qmake="$PWD/../qtbase/bin/qmake" --install-libs=<install dir> --debug | perl Tools/Scripts/build-webkit --qt --qmake="$PWD/../qtbase/bin/qmake" --install-libs=<install dir> --debug | ||
--makeargs="$MAKEFLAGS" | --makeargs="$MAKEFLAGS" | ||
</code> | </code> | ||
Line 285: | Line 288: | ||
На сайте [http://trac.webkit.org/wiki/BuildingQtOnWindows WebKit.org] ''[trac.webkit.org]'' вы найдете инструкции для создания WebKit на Windows. Кроме того потребуются библиотеки [http://site.icu-project.org/ ICU] ''[site.icu-project.org]'' и [http://sourceware.org/pthreads-win32 phtreads-win32] ''[sourceware.org]''. После распаковки пакета (в папку ''c:''), необходимо сделать следующее: | На сайте [http://trac.webkit.org/wiki/BuildingQtOnWindows WebKit.org] ''[trac.webkit.org]'' вы найдете инструкции для создания WebKit на Windows. Кроме того потребуются библиотеки [http://site.icu-project.org/ ICU] ''[site.icu-project.org]'' и [http://sourceware.org/pthreads-win32 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\pthreads.2'' в переменную окружения ''INCLUDE'' | ||
* Добавить ''c:\phtreads\Pre-built.2\dll\x64'' или ''c:\phtreads\Pre-built.2\dllx86'' в переменную окружения PATH | *Добавить ''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''. | Инструменты ''bison'', ''flex'' и ''gperf'', которые требуются для сборки, предусмотрительно размещены в папке ''gnuwin32\bin''. | ||
Line 297: | Line 301: | ||
perl Tools\Scripts\build-webkit --qt --qmake="%CD%\\..\\qtbase\\bin\\qmake.exe" --install-libs=<install dir> | perl Tools\Scripts\build-webkit --qt --qmake="%CD%\\..\\qtbase\\bin\\qmake.exe" --install-libs=<install dir> | ||
--release --makeargs="%MAKEFLAGS%" | --release --makeargs="%MAKEFLAGS%" | ||
</code> | </code> | ||
== Установка (Linux / Mac OS X) == | ==Установка (Linux / Mac OS X)== | ||
'''Примечание:''' Установка будет необходима только если вы не использовали опции ''-developer-build'' или ''-prefix "%PWD%/qtbase"''. В противном случае вы можете просто пользоваться Qt из каталога сборки. | '''Примечание:''' Установка будет необходима только если вы не использовали опции ''-developer-build'' или ''-prefix "%PWD%/qtbase"''. В противном случае вы можете просто пользоваться Qt из каталога сборки. | ||
Line 315: | Line 320: | ||
</code> | </code> | ||
== Очистка == | ==Очистка== | ||
Для получения '''действительно''' чистого дерева используйте: | Для получения '''действительно''' чистого дерева используйте: | ||
Line 325: | Line 330: | ||
с некоторых пор, confclean, больше не работает из верхнего уровня репозитария. | с некоторых пор, confclean, больше не работает из верхнего уровня репозитария. | ||
== Получение обновлений == | ==Получение обновлений== | ||
Чтобы обновить qt5.git репозитарий, а также подмодули до последних известных протестированных версий, выполните | Чтобы обновить qt5.git репозитарий, а также подмодули до последних известных протестированных версий, выполните | ||
Line 346: | Line 351: | ||
используется для того чтобы получить все головные модули и их основные ответвления. | используется для того чтобы получить все головные модули и их основные ответвления. | ||
* '''Подсказка 1:''' ''git submodule update'' делает "жесткий" сброс подмодулей, потенциально избавляя от любых нежелательных изменений которые вы сделали! Если это произошло с вами (и вы не работали с персональными ответвлениями), ''git reflog'', ваш друг…. | *'''Подсказка 1:''' ''git submodule update'' делает "жесткий" сброс подмодулей, потенциально избавляя от любых нежелательных изменений которые вы сделали! Если это произошло с вами (и вы не работали с персональными ответвлениями), ''git reflog'', ваш друг…. | ||
* '''Подсказка 2:''' При создании сценариев для обновлений на Windows отметьте, что ''git clean'' часто сбоит, если какой либо процесс блокирует файл или папку. | *'''Подсказка 2:''' При создании сценариев для обновлений на Windows отметьте, что ''git clean'' часто сбоит, если какой либо процесс блокирует файл или папку. | ||
== Использование основных ответвлений в подмодулях == | ==Использование основных ответвлений в подмодулях== | ||
По умолчанию ''checkout'' не будет содержать последние основные ответвления каждого отдельного репозитария подмодуля, но содержит комбинацию версий, которые зависят друг от друга. Если требуется получить абсолютно последний материал, можете сделать например так: | По умолчанию ''checkout'' не будет содержать последние основные ответвления каждого отдельного репозитария подмодуля, но содержит комбинацию версий, которые зависят друг от друга. Если требуется получить абсолютно последний материал, можете сделать например так: | ||
Line 367: | Line 372: | ||
Однако, всегда есть шанс, что компиляция перестанет работать из-за несовместимых версий подмодулей! В таком случае, вы можете спросить у других людей, активно работающих над модулем, как разрешить эти несовместимости. | Однако, всегда есть шанс, что компиляция перестанет работать из-за несовместимых версий подмодулей! В таком случае, вы можете спросить у других людей, активно работающих над модулем, как разрешить эти несовместимости. | ||
== Известные проблемы == | ==Известные проблемы== | ||
=== Linux === | ===Linux=== | ||
==== сбой конфигурации с "No QPA platform plugin enabled! " (Linux) ==== | ====сбой конфигурации с "No QPA platform plugin enabled! " (Linux)==== | ||
Вам необходимо установить libxcb, и его зависимые пакеты, см. 'Системные требования'. | Вам необходимо установить libxcb, и его зависимые пакеты, см. 'Системные требования'. | ||
==== qmlscene сообщение об ошибке "Cannot create platform GL context, none of GLX, EGL, DRI2 is enabled" (Linux) ==== | ====qmlscene сообщение об ошибке "Cannot create platform GL context, none of GLX, EGL, DRI2 is enabled" (Linux)==== | ||
Попытайтесь установить libx11-xcb-dev пакет: | Попытайтесь установить libx11-xcb-dev пакет: | ||
Line 385: | Line 390: | ||
впоследствии вы должны повторно выполнить configure qtbase/src/plugins/platforms/xcb с опцией force для перекомпиляции. | впоследствии вы должны повторно выполнить configure qtbase/src/plugins/platforms/xcb с опцией force для перекомпиляции. | ||
==== WebKit не собирается при недостающем ICU ==== | ====WebKit не собирается при недостающем ICU==== | ||
В настоящее время не конфигурируется проверка времени для ICU, так установите его через диспетчер пакетов. | В настоящее время не конфигурируется проверка времени для ICU, так установите его через диспетчер пакетов. | ||
==== для Ubuntu/Debian: ==== | ====для Ubuntu/Debian:==== | ||
<code> | <code> | ||
Line 395: | Line 400: | ||
</code> | </code> | ||
==== для Fedora: ==== | ====для Fedora:==== | ||
<code> | <code> | ||
Line 403: | Line 408: | ||
Альтернативно можете собрать Qt без webkit, удалив или переименовав qtwebkit, qtwebkit-examples-and-demos каталоги. -no-webkit опция конфигуратора еще не работает: https://bugreports.qt.io/browse/QTBUG-20577 | Альтернативно можете собрать Qt без webkit, удалив или переименовав qtwebkit, qtwebkit-examples-and-demos каталоги. -no-webkit опция конфигуратора еще не работает: https://bugreports.qt.io/browse/QTBUG-20577 | ||
=== Windows === | ===Windows=== | ||
==== qdeclarative не компилируется из-за без вести пропавших v8.lib (Windows) ==== | ====qdeclarative не компилируется из-за без вести пропавших v8.lib (Windows)==== | ||
Компиляция v8 в qtbase требует Python. Удостоверьтесь что python.exe прописан в переменной окружения % PATH% перейдите в каталог qtjsbackend, выполните qmake && nmake. | Компиляция v8 в qtbase требует Python. Удостоверьтесь что python.exe прописан в переменной окружения % PATH% перейдите в каталог qtjsbackend, выполните qmake && nmake. | ||
==== Проблема с отладкой OpenGL (Windows) ==== | ====Проблема с отладкой OpenGL (Windows)==== | ||
Установите переменную окружения <code>QT_QPA_VERBOSE=gl:1</code> и запустите приложение с установленным [http://technet.microsoft.com/en-us/sysinternals/bb896647 DebugView]. Журнал покажет требуемый по сравнению с полученной версией OpenGL. Если в логах журнала обнаружится что у него только OpenGL 1.1, то QML2 не будет работать. Обратите внимание на то, что ''qmlscene'' не будет сообщать об ошибках не поддерживаемых версий OpenGL. | Установите переменную окружения <code>QT_QPA_VERBOSE=gl:1</code> и запустите приложение с установленным [http://technet.microsoft.com/en-us/sysinternals/bb896647 DebugView]. Журнал покажет требуемый по сравнению с полученной версией OpenGL. Если в логах журнала обнаружится что у него только OpenGL 1.1, то QML2 не будет работать. Обратите внимание на то, что ''qmlscene'' не будет сообщать об ошибках не поддерживаемых версий OpenGL. | ||
== Вопросы и комментарии == | ==Вопросы и комментарии== |
Latest revision as of 09:00, 3 January 2023
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. Чтобы создать её, вы должны проделать следующее:
- установить Direct X SDK [msdn.microsoft.com]:
- получить и скомпилировать ANGLE (из SVN репозитория) как описано на этой странице [code.google.com]:
- Примечание: При сборке для 64х битных систем, деактивируйте опцию WarnAsError в каждом файле проекта (поскольку в противном случае предупреждения о целочисленных преобразованиях повредят сборку).
- При конфигурировании Qt передайте в параметры командной строки -opengl es2 -angle <path>
Поддерживаемые компиляторы на Windows
- Windows SDK 7.1 с Visual Studio 2010 (предпочтительно). С 16.03.2012, при установке SDK потребуется установка пакетов в следующем порядке (см. readme.html предоставленный пакетом обновления):
- Установка Visual Studio 2010
- Установка Windows SDK 7.1
- Установка Visual Studio 2010 SP1
- Установка 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. Соответствующие опции:
- --module-subset=default,-qtwebengine: позволяет не загружать qtwebengine при передаче этой опции. Этот модуль довольно большой, компиляция занимает много времени и часто является источником ошибок. Таким образом, рекомендуется загружать и собирать его, только если намереваетесь использовать. В дальнейшем вы всегда можете повторно выполнить 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.