Building Qt 5 from Git: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
'''English''' [[Building-Qt-5-from-Git-SimplifiedChinese|简体中文]] [[Building-Qt-5-from-Git-Bulgarian|Български]] [[Building-Qt-5-from-Git-French|Français]] [[Building-Qt-5-from-Git-Russian|Русский]]


=Building Qt 5 from Git=
==Introduction==
This article provides hints for checking out and building the modularized Qt 5 from Git, on '''desktop''' platforms. Please feel free to update this article as things change during development. Raise issues related to the article via: http://forum.qt.io/viewthread/7018
If you also want to compile Qt Creator, see [[Building-Qt-Creator-from-Git|Building Qt Creator from Git]] ''[qt.io]''.
==System Requirements==
===All desktop platforms===
* Git ('''>= 1.6.x''')
* Perl ('''>=5.14''')
* Python ('''>=2.6.x''')
* A working compiler
For more detailed information, see [http://doc.qt.io/qt-5/build-sources.html Building Qt Sources] ''[qt.io]''
====<span class="caps">SSL</span> (optional)====
See [http://doc.qt.io/qt-5.1/qtnetwork/ssl.html#enabling-and-disabling-ssl-support Enabling and Disabling <span class="caps">SSL</span> Support] ''[qt.io]''
====WebKit (optional)====
* bison
* flex
* gperf
* [http://www.ruby-lang.org/ Ruby] ''[ruby-lang.org]''
* [http://site.icu-project.org/ <span class="caps">ICU</span>] ''[site.icu-project.org]''
For Windows, ''bison'', ''flex'' and ''gperf'' are provided with the source code at ''&lt;qt&gt;\gnuwin32\bin''. Get Ruby from http://rubyinstaller.org/. You can download the precompiled <span class="caps">ICU</span> packages from icu-project.org (<span class="caps">MSVC</span> 2010 only), or [[Compiling-ICU|compile your own]] ''[qt.io]''
===Linux/X11===
====apt-get build-dep====
Ubuntu/Debian based systems have a convenient way of installing build-depends for any package:<br />
<span class="caps">RPM</span>-based distros with yum offer a similar tool called yum-builddep.
====Convenience packages (Ubuntu 11.10 — 12.10 only)====
For Ubuntu/Debian, Gabor Loki has provided a custom <span class="caps">PPA</span> with the [https://launchpad.net/~u-szeged/+archive/sedkit sedkit-env-webkit] ''[launchpad.net]'' meta package that installs all required dependencies for building Qt/Qt WebKit. You can add the <span class="caps">PPA</span> by calling:
For other distros, get the separate components below.
====Build essentials====
=====Ubuntu/Debian:=====
=====Fedora:=====
=====OpenSUSE:=====
====Libxcb====
[http://xcb.freedesktop.org/ Libxcb] ''[xcb.freedesktop.org]'' is now the default window-system backend for platforms based on X11/Xorg, and you should therefore install libxcb and its accompanying packages. Qt5 should build with whatever libxcb version is available in your distro’s packages (but you may optionally wish to use v1.8 or higher to have threaded rendering support). [http://qt.gitorious.org/qt/qtbase/blobs/stable/src/plugins/platforms/xcb/README src/plugins/platforms/xcb/README] ''[qt.gitorious.org]'' lists the required packages.
=====Ubuntu/Debian:=====
=====Fedora up to 16:=====
=====Fedora 17+ (xcb-util-renderutil is currently available in updates repository until it goes stable):=====
=====OpenSuSE 12.2=====
=====ArchLinux:=====
On Chakra Linux, other than packages mentioned for ArchLinux, you need to install package xcb-util-keysyms separately. It’s available from <span class="caps">CCR</span>.
=====Mandriva/ROSA/Unity:=====
=====Centos 5/6=====
Install missing Qt build dependencies:<br />
Install Red Hat DevTools 1.1 for CentOS-5/6 ×86_64, they are required due to outdated <span class="caps">GCC</span> shipped with default CentOS<br />
You also need to initialise your newly installed dev tools:<br />
For more info on preparing the environment on '''CentOS''', see [https://forum.qt.io/viewthread/30708/ this thread] ''[qt.io]''.
====OpenGL support====
For Qt Quick 2 a graphics driver with native OpenGL 2.0 support is highly recommended.
====Accessibility====
It is recommended to build with accessibility enabled, install '''libatspi 2''' and '''libdbus-1''' development packages.
====Qt WebKit====
=====Ubuntu/Debian:=====
=====Fedora:=====
=====OpenSUSE:=====
=====Mandriva/ROSA/Unity:=====
====Qt WebEngine====
=====Ubuntu (all):=====
======Additional dependencies on Ubuntu 14.04:======
=====Fedora:=====
'''Please note that these libraries need to be installed on other distributions as well, though the package names and the set of libraries that are preinstalled may differ depending on the distribution used.'''
====Qt Multimedia====
You’ll need at least alsa-lib ('''&gt;= 1.0.15''') and gstreamer ('''&gt;=0.10.24''', [http://lists.qt.io/pipermail/development/2012-November/007916.html but &lt;1.0 for now] ''[lists.qt.io]'') with the base-plugins package.
=====Ubuntu/Debian:=====
===OS X===
Install the latest Xcode from the App Store. Verify that your Xcode install is properly set up for command line use:<br />
This should give you eg:<br />
You can verify that the right Xcode is being used by running:<br />
If this points to /Developer you’re probably using an older Xcode version. Switch to the latest one by running:<br />
===Windows===
====Windows Graphics Drivers====
QML2 requires OpenGL 2.1 or higher or Open GL ES 2.0 to work.
In Windows, two options are available:
# Use the [http://code.google.com/p/angleproject/ <span class="caps">ANGLE</span>-library] ''[code.google.com]'' to translate OpenGL calls into ''DirectX'' (default)
# Use the native OpenGL driver for your graphics card
A copy of <span class="caps">ANGLE</span> is bundled in Qt 5. To use Option 1, you need to install the [http://msdn.microsoft.com/en-us/directx/default.aspx DirectX <span class="caps">SDK</span>] ''[msdn.microsoft.com]'' (Note: Starting from Windows Kit 8, this is included in the Windows <span class="caps">SDK</span>).
To use Option 2, you need to ensure that your graphics card driver supports OpenGL 2.1 or higher (Note: The stock Windows driver only supports OpenGL 1.1, which is insufficient), and pass `-opengl desktop’ to configure.exe.
====Supported Compilers on Windows====
* Visual Studio 2013
* Visual Studio 2012
* Visual Studio 2010 or Windows <span class="caps">SDK</span> v7.0A (upgradable to Windows <span class="caps">SDK</span> v7.1)
* Visual Studio 2008 or Windows <span class="caps">SDK</span> v6.0A (upgradable to Windows <span class="caps">SDK</span> v6.1)
* MinGW-w64 based compiler with ''g++'' version 4.7 or higher (e.g. [http://sourceforge.net/projects/mingwbuilds/ MinGW-builds] ''[sourceforge.net]'', see also [[MinGW-64-bit|MinGW 64 bit]]).
Notes:
* Windows <span class="caps">SDK</span> v6.0A/v7.0A contains the same compiler as Visual Studio 2008/2010.
* Windows <span class="caps">SDK</span> 8.0 and later do not include a compiler.
* As of 16.3.2012, if you wish to install both Visual Studio 2010 and the standalone <span class="caps">SDK</span>, you need to follow this order (see readme.html provided with the service pack):
*# Install Visual Studio 2010
*# Install Windows <span class="caps">SDK</span> 7.1. See also [[Cannot Install Windows SDK|Cannot_Install_Windows_SDK]] page.
*# Install Visual Studio 2010 SP1
*# Install Visual C++ 2010 SP1 Compiler Update for the Windows <span class="caps">SDK</span> 7.1
====Windows Build environment====
We recommend creating a command prompt that provides the build environment (see the [http://qt.gitorious.org/qt-creator/qt-creator/blobs/master/README Qt Creator <span class="caps">README</span>] ''[qt.gitorious.org]'' ). In this environment, ''Python'' (e.g. ''Active Python 2.7'' later) and ''Perl'' (e.g. ''Active State Perl 5.12'' or later) should be in the ''<span class="caps">PATH</span>''.<br /> Get Perl from: http://www.activestate.com/activeperl/downloads ''[activestate.com]''<br /> Get Python from: http://www.python.org/download/releases/ ''[python.org]''<br /> Get Ruby from: [http://www.rubyinstaller.org/ http://www.rubyinstaller.org/downloads/] ''[rubyinstaller.org]''
'''Hint''': Make sure that ''Perl'' is added to the path in front of ''git'' since that ships an outdated version (''Perl'' 5.8), which will cause the scripts to fail.
Multicore building: To speed up building when using ''nmake'', the compiler can be instructed to use all available <span class="caps">CPU</span> cores in one of the following ways:
* Pass the option ''-MP'' to Qt’s ''configure''
* Set the environment variable ''CL'' (specifying Visual Studio compiler options) to ''/MP'' (On the command line: <code>set CL=/MP</code>)
* Use the tool [[jom]] instead of nmake.
====<span class="caps">ICU</span> on Windows====
Qt 5 can make use of the [http://site.icu-project.org/ <span class="caps">ICU</span>] ''[site.icu-project.org]'' library for <span class="caps">UNICODE</span> and Globalization support. This is '''required''' for building Qt WebKit. You can use precompiled versions of <span class="caps">ICU</span> with a Visual Studio 2010 dependency from the website, or [[Compiling-ICU|compile <span class="caps">ICU</span> on your own]] .
At compile time, the absolute paths of ''include'' and ''lib'' folders of the <span class="caps">ICU</span> installation must be appended to ''<span class="caps">INCLUDE</span>'' and ''<span class="caps">LIB</span>'' environment variables after calling the setup script of the Windows <span class="caps">SDK</span>.
At run-time, the <span class="caps">ICU</span> <span class="caps">DLL</span>s need to be found. This can be achieved by copying the <span class="caps">DLL</span>s to the application folder or adding the ''bin'' folder of the <span class="caps">ICU</span> installation to the ''<span class="caps">PATH</span>'' environment variable.
==Getting the source code==
First clone the top-level Qt 5 git repository:
or (if you’re behind a firewall and want to use the https protocol):
Then check out the target branch (see [[Branch-Guidelines|Branch Guidelines]]):
Following the [http://qt.gitorious.org/qt/qt5/blobs/stable/README.git <span class="caps">README</span>.git] ''[qt.gitorious.org]'' – file we initialize the repository using the script ''init-repository'' which clones the various sub-modules of Qt 5. Relevant options:
* <code>--no-webkit</code> : Consider skipping qtwebkit by passing this option. This module is quite big, takes a long time to compile and is often a source of compile errors, so it is recommend to only download it if you intend to use it. You can always re-run init-repository later on to add it.
* <code>--codereview-username &lt;Jira/Gerrit username&gt;</code> : If you plan to contribute to Qt, you should specify your [[Gerrit Introduction|codereview username]] so that the git remotes are properly set up.
==Configuring and building==
The Qt5 build system should be fairly resilient against any “outside distractions” – it shouldn’t matter whether you have other Qt versions in <span class="caps">PATH</span>, and <span class="caps">QTDIR</span> is entirely ignored. However, make sure that you have no qmake-specific environment variables like <span class="caps">QMAKEPATH</span> or <span class="caps">QMAKEFEATURES</span> set, and the qmake -query output does not refer to any other Qt versions ($HOME/.config/Trolltech/QMake.conf should be empty).
Configure the build (from top level dir). Disabling tests and examples will greatly speed up compilation:
For Linux / OS X:<br />
For Windows:<br />
The <code>-developer-build</code> options export more symbols than in a traditional Qt build in order to allow more classes and functions to be unit tested. It also defaults to a ‘debug’ build, and installs the binaries in the current directory, avoiding the need for ‘make install’. ‘-opensource’ sets the license to be <span class="caps">LGPL</span> 2.1. The <code>-nomake examples</code> and <code>-nomake tests</code> parameters make sure examples and tests aren’t compiled by default. You can always decide to compile them later by hand.
* Hint1: On Linux, you should also pass <code>-no-gtkstyle</code>. This is because on a number of systems (at least <span class="caps">SUSE</span> and Gentoo) <code>pkg-config —cflags gtk+-2.0</code> actually returns paths that include the system Qt 4.x include directories.
* Hint2: You can add <code>-confirm-license</code> to get rid of the question whether you agree to the license.
* Hint3: On Windows, you might not be able to build if <code>sh.exe</code> is in your ''<span class="caps">PATH</span>'' (for example due to a ''git'' or ''msys'' installation). Such an error is indicated by <code>qt5-srcqtbasebinqmake.exe: command not found</code> and alike. In this case, make sure that <code>sh.exe</code> is ''not'' in your path. You will have to re-configure if your installation is already configured.
Now trigger the build by running:
For Linux / OS X:<br />
If you are making an out-of-source developer build and that also includes building the QtWebKit module, the above command will return an error while building QtWebKit. This can be fixed by omitting the ''all'' and simply running:<br />
For Windows (<span class="caps">MSVC</span>), choose one of the following, depending on your setup/environment:<br />
Or only build a specific module, e.g. declarative, and modules it depends on:
===Building Qt WebKit===
====Windows====
[http://trac.webkit.org/wiki/BuildingQtOnWindows WebKit.org] ''[trac.webkit.org]'' has instructions for building WebKit on Windows. [http://site.icu-project.org/ <span class="caps">ICU</span>] ''[site.icu-project.org]'' is required for building.
The tools ''bison'', ''flex'' and ''gperf'' which are required for building are provided for convenience in the folder ''gnuwin32\bin''. If you are using shadow builds, you must add this directory to your <code><span class="caps">PATH</span></code>, else no special actions need to be done manually in order to use them.
==Installing (Linux / OS X)==
* '''Note:''' Installation is only needed if you haven’t used the configure options <code>-developer-build</code> or <code>-prefix “<span class="caps">PWD</span>/qtbase”</code>. Otherwise you can just use Qt from the build directory.
To install, run
==Cleaning==
To get a '''really''' clean tree use:
since make confclean no longer works from the top-level of the repo.
==Getting updates==
To update both the qt5.git repo as well as the submodules to the list of revisions that are known to work, run<br />
In addition, you should pass the same parameters to init-repository as you did in “Getting the source code”.
Unlike a “normal” git submodule update, this ensures that any changes to the module structure are automatically pulled as well.
If you are planning to do nightly builds, consider using the script ''qt5_tool'' that lives in ''qtrepotools/bin''. It provides options for updating the repository, cleaning and building. For example, <code>qt5_tool -u -c -b</code> can be used to clean, update and build. <code>qt5_tool -p -c – b</code> would be used to pull all modules to the head of their master branches.
Depending upon what changed in the source since it was last updated you might have to run configure again. To be really sure everything gets built, you can run clean first, then configure and make.
* '''Hint1:''' The submodule update does a checkout in submodules, potentially hiding any local commits you’ve done. If the latter happened to you (and you haven’t been working with branches anyhow), <code>git reflog</code> is your friend.
* '''Hint2:''' When creating scripts for updates on Windows, note that <code>git clean</code> often fails if some process locks a file or folder.
==Using latest branches in the submodules==
By default the checkout will not contain the latest stable/dev branches of each individual submodule repository, but a combination of versions that are known to work together. If you want to get the absolute latest stuff you can do so on a per-module basis, e.g.
or use qt5_tool to update all repositories:
However, there’s a good chance that compilation will fail due to incompatible versions of submodules. You might want to ask other persons actively working on a module how to resolve these incompatibilities.
Some [[unix-shell-tricks-for-Qt-development|advanced shell tricks]] can be useful when you are making or reviewing changes in multiple modules.
==Issues==
===Linux===
====configure fails with “No <span class="caps">QPA</span> platform plugin enabled!” (Linux)====
You should install the libxcb and it’s accompanying packages, see ‘System Requirements’.
====configure fails with errors like “cannot stat file …”====
Your perl version is too old, Qt 5 beta1 needs at least 5.14.
====qmlscene segfaults “Cannot create platform GL context, none of <span class="caps">GLX</span>, <span class="caps">EGL</span>, DRI2 is enabled” (Linux)====
Try installing the libx11-xcb-dev package:
afterwards you have to re-run configure and force qtbase/src/plugins/platforms/xcb to recompile.
====WebKit doesn’t compile, missing <span class="caps">ICU</span>====
Currently there is no configure time check for <span class="caps">ICU</span>, so install it through the package manager through
====on Ubuntu/Debian:====
====on Fedora:====
* You can also compile Qt without Qt WebKit by deleting / renaming the qtwebkit, qtwebkit-examples-and-demos directories.
* The —no-webkit option of configure added, see [https://bugreports.qt.io/browse/QTBUG-20577 <span class="caps">QTBUG</span>-20577] ''[bugreports.qt.io]'' issue.
====Qt D-Bus fails to build due to “inconsistent user-defined literal suffixes”====
This occours when you attempt to build Qt 5 with <span class="caps">GCC</span> 4.7 while D-Bus &lt; 1.4.20 is present on your system. (For example, the default Fedora 17 installation is prone to this error.) The error message is this:
Note: The error is in the header files of D-Bus itself, and it has been fixed upstream, see https://bugs.freedesktop.org/show_bug.cgi?id=46147<br /> Solution: either upgrade to a newer version of D-Bus or edit that one line of the header file manually.
====[…]::isNull is not defined (from qvariant_p.h)====
C++11 support is detected while your <span class="caps">GCC</span> doesn’t properly support it<br /> Fixed by passing<br /> to the configure options
====cc1: fatal error: .pch/release-shared/QtGui: No such file or directory====
Currently unresolved bug with the build of assembly files, see discussion at http://comments.gmane.org/gmane.comp.lib.qt.devel/5933<br /> Fixed by passing<br /> to the configure options
====ld: hidden symbol `void QQmlThread::postMethodToThread&lt;QQmlDataBlob*, QQmlDataBlob*, QQmlDataLoaderThread&gt;(void (QQmlDataLoaderThread::''')(QQmlDataBlob'''), QQmlDataBlob* const&amp;)’ isn’t defined====
Bug with <span class="caps">GCC</span> versions &lt; 4.4.x, see bug report at https://bugzilla.redhat.com/show_bug.cgi?id=493929<br /> Fixed by adding<br /> in '''qtdeclarative/src/qml/qml.pro'''
====Touchscreen (or Wacom tablet) doesn’t work====
Qt depends on having libxi (including development headers), supporting XInput protocol 2.2 or higher, available at build time in order to have multi-touch support. Otherwise configure will fall back to XInput 2.0 which does not support touchscreens. To prove that is the problem, try this:
export QT_XCB_DEBUG_XINPUT_DEVICES=1
and try your Qt application again. At startup, Qt will enumerate the input devices available, like this
If it does not say Qt supports 2.2 or greater, it means the headers weren’t available when Qt was built, so the support for touch was not included. If you do have 2.2 or greater but it doesn’t say it’s a touchscreen at the end, there may be some other problem such that the touchscreen is not recognized, and you may want to write up a bug, after verifying that touch works in other X11 applications.
===Windows===
====Debugging OpenGL issues (Windows)====
Set the environment variable <code>QT_QPA_VERBOSE=gl:1</code> and run the application with [http://technet.microsoft.com/en-us/sysinternals/bb896647 DebugView] ''[technet.microsoft.com]'' installed. The log will show the requested vs obtained OpenGL version. If the log tells you that it only has OpenGL 1.1, QML2 will not work. Note that ''qmlscene'' will not report errors about unsupported OpenGL versions.
==Questions &amp; Comments==
Please raise questions &amp; comments about this article in the forum: http://forum.qt.io/viewthread/7018
===Categories:===
* [[:Category:Developing with Qt|Developing_with_Qt]]
** [[:Category:Developing with Qt::Qt-5|Qt 5]]
* [[:Category:HowTo|HowTo]]

Revision as of 14:11, 14 January 2015