Qtのビルド

2019年6月20日

はじめに

Qt5.5のオフィシャルバイナリではVS2010 32bit、VS2013 32bit、64bitが提供されていてその他のバージョンのバイナリが提供されていない。(Qt5.6からはVS2015の32bit、64bitのバイナリが提供されるようだが、VS2010の提供が外れるようだ。)OpenCVにQtを組み込もうとしたときにオフィシャルバイナリが準備されていない環境でQtを組み込みたい場合はソースからビルドする必要がある。

Qtのソースをダウンロード

ネットで検索するとソースの取得をgitを使って行う方法の記載が多いですが、ダウンロードページにソースファイルのリンクがあって、これを使うとparlのスクリプトを実行する手間もいりません。

Download Qt Open Sourceページを開く。

View All Downloadsをクリック

ページが下に広がるのでスクロールしページ中程にあるSource packages & Other releasesが表示されるまでスクロールする。

For Windows users as a single zip file (542 MB) のinfoリンクをクリック

Qt Downloadsページが開く

Download fileをクリックするとファイルのダウンロードが始まる。

ダウンロードが完了するとqt-everywhere-opensource-src-x.x.x.zip(x.x.xはバージョンナンバー今回は5.5.1)というファイルができる。

ソースを展開

インストールカレントフォルダーの直下に「qt」というフォルダを作成する。

qtフォルダ内にダウンロードしたzipファイルを展開する。「qt\qt-everywhere-opensource-src-x.x.x」にソースファイルが展開される。

Qtのビルド

ビルドの手順はconfigureで環境に合わせた中間ビルドファイルを作成した後nmake→nmake installと進めていく。
nmakeコマンドで実行すると3時間程度ビルドに時間が掛かるので、
QtCreatorに付属しているjomコマンドを使用する方がよいです。1程度でビルドが完了する。

jomコマンドを使用する場合はあらかじめQtCreatorをインストールしておく必要がある。QtCreatorをデフォルトインストールした場合、Jom.exeのある場所はC:\Qt\Tools\QtCreator\binである。

configureは展開したソースファイルが格納されているフォルダ直下にあるconfigure.batを使用する。

ビルドするVisual StudioのNative Toolsコマンド プロンプトで以下のコマンドを実行する。64ビット版をビルドする場合はx64 Native Tools コマンド プロンプト、32ビット版をビルドする場合はx86 Native Tools コマンド プロンプトを使用する。(Native Tools コマンド プロンプトの名称はVisual Studioのバージョンによって多少異なる。)

%OUTPUT_DIR%には最終的にライブラリバイナリーが格納されるフォルダを指定する。

Configure -developer-build -confirm-license -opensource -nomake examples -nomake tests -opengl desktop -no-warnings-are-errors -prefix “%OUTPUT_DIR%"

Visual Studio 2013(たぶん2015も)は-no-warnings-are-errorsを指定しておかないとnmakeしたときにエラーがでる。

-platformオプションは環境変数QMAKESPECで宣言しておけばオプションで指定する必要はない。

qt_build.batとして以下のような内容をバッチファイルとしてカレントフォルダに登録していると簡単にビルドができる。

引数でVisual Studioのバージョンとプラットフォームを指定する。Visual Studio2013 でx64のビルドをしたい場合はコマンドプロンプトで下記のように入力して実行する。

qt_build 2013 64

Qtのバージョンは環境変数QTVERで指定する。

set VERNUM=%1
set PLATFORM=%2
set QTVER=5.5.1
set CURRENT_DIR=%~dp0
set JOMDIR=C:\Qt\Tools\QtCreator\bin
set BUILD_DIR=qt\build\%QTVER%-msvc%VERNUM%-x%PLATFORM%-opengl
set OUTPUT_DIR=%CURRENT_DIR%qt\DLL\\%QTVER%-msvc%VERNUM%-x%PLATFORM%-opengl
set PATH=%JOMDIR%;%CURRENT_DIR%%BUILD_DIR%\qtbase\bin;%PATH%
set QMAKESPEC=win32-msvc%VERNUM%
 
mkdir %BUILD_DIR%
cd %BUILD_DIR%
 
call ..\..\qt-everywhere-opensource-src-%VERNUM%\configure.bat -developer-build -confirm-license -opensource -nomake examples -nomake tests -opengl desktop -no-warnings-are-errors -prefix "%OUTPUT_DIR%"
 
call jom
 
call jom install
 
cd ..\..\..\

ビルドの途中でpythonを使用するのであらかじめpythonをPCにインストールしておく必要がある。

 

Configureのオプション一覧

ネットで調べても出てこなかったのでconfigure.bat -helpで出力される一覧を掲載する。

>Usage: configure [options]
 
Installation options:
 
These are optional, but you may specify install directories.
 
    -prefix <dir> ...... The deployment directory, as seen on the target 
                         device.
                         (default %CD%)
 
    -extprefix <dir> ... The installation directory, as seen on the host 
                         machine.
                         (default SYSROOT/PREFIX)
 
    -hostprefix [dir] .. The installation directory for build tools running on 
                         the
                         host machine. If [dir] is not given, the current build
                         directory will be used. (default EXTPREFIX)
 
You may use these to change the layout of the install. Note that all 
directories
except -sysconfdir should be located under -prefix/-hostprefix:
 
    -bindir <dir> ...... User executables will be installed to <dir>
                         (default PREFIX/bin)
    -libdir <dir> ...... Libraries will be installed to <dir>
                         (default PREFIX/lib)
    -headerdir <dir> ... Headers will be installed to <dir>
                         (default PREFIX/include)
    -archdatadir <dir> . Architecture-dependent data used by Qt will be 
                         installed to <dir>
                         (default PREFIX)
    -libexecdir <dir> .. Program executables will be installed to <dir>
                         (default ARCHDATADIR/bin)
    -plugindir <dir> ... Plugins will be installed to <dir>
                         (default ARCHDATADIR/plugins)
    -importdir <dir> ... Imports for QML1 will be installed to <dir>
                         (default ARCHDATADIR/imports)
    -qmldir <dir> ...... Imports for QML2 will be installed to <dir>
                         (default ARCHDATADIR/qml)
    -datadir <dir> ..... Data used by Qt programs will be installed to <dir>
                         (default PREFIX)
    -docdir <dir> ...... Documentation will be installed to <dir>
                         (default DATADIR/doc)
    -translationdir <dir> Translations of Qt programs will be installed to 
                          <dir>
                          (default DATADIR/translations)
    -examplesdir <dir> . Examples will be installed to <dir>
                         (default PREFIX/examples)
    -testsdir <dir> .... Tests will be installed to <dir>
                         (default PREFIX/tests)
 
    -hostbindir <dir> .. Host executables will be installed to <dir>
                         (default HOSTPREFIX/bin)
    -hostlibdir <dir> .. Host libraries will be installed to <dir>
                         (default HOSTPREFIX/lib)
    -hostdatadir <dir> . Data used by qmake will be installed to <dir>
                         (default HOSTPREFIX)
 
Configure options:
 
 The defaults (*) are usually acceptable. A plus (+) denotes a default value 
 that needs to be evaluated. If the evaluation succeeds, the feature is 
 included. Here is a short explanation of each option:
 
    -release ........... Compile and link Qt with debugging turned off.
 *  -debug ............. Compile and link Qt with debugging turned on.
 +  -debug-and-release . Compile and link two Qt libraries, with and without 
                         debugging turned on.
 
    -force-debug-info .. Create symbol files for release builds.
    -separate-debug-info Strip debug information into a separate file.
 
    -developer-build ... Compile and link Qt with Qt developer options 
                         (including auto-tests exporting)
 
    -opensource ........ Compile and link the Open-Source Edition of Qt.
    -commercial ........ Compile and link the Commercial Edition of Qt.
 
    -c++11 ............. Compile Qt with C++11 support enabled.
    -no-c++11 .......... Do not compile Qt with C++11 support enabled.
 
    -use-gold-linker ... Link using the GNU gold linker (gcc only).
 *  -no-use-gold-linker Do not link using the GNU gold linker.
 
    -enable-new-dtags .. Use new DTAGS for RPATH (Linux only).
 *  -disable-new-dtags . Do not use new DTAGS for RPATH.
 
 *  -shared ............ Create and use shared Qt libraries.
    -static ............ Create and use static Qt libraries.
 
 *  -static-runtime .... Statically link the C/C++ runtime library.
 
    -ltcg .............. Use Link Time Code Generation. (Release builds only)
 *  -no-ltcg ........... Do not use Link Time Code Generation.
 
    -make <part> ....... Add part to the list of parts to be built at make time
                           libs
                           tools
                           examples
    -nomake <part> ..... Exclude part from the list of parts to be built.
 
    -skip <module> ..... Exclude an entire module from the build.
 
    -no-compile-examples Install only the sources of examples.
 
    -no-widgets ........ Disable Qt Widgets module.
 
    -no-gui ............ Disable Qt GUI module.
 
    -no-accessibility .. Disable accessibility support.
 
     ................... Disabling accessibility is not recommended, as it will
                         break QStyle
                         and may break other internal parts of Qt.
                         With this switch you create a source incompatible 
                         version of Qt,
                         which is unsupported.
 
 *  -accessibility ..... Enable accessibility support.
 
    -no-sql-<driver> ... Disable SQL <driver> entirely, by default none are 
                         turned on.
    -qt-sql-<driver> ... Enable a SQL <driver> in the Qt Library.
    -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to at run
                         time.
                         Available values for <driver>:
                           mysql
                           psql
                           oci
                           odbc
                           tds
                           db2
 +                         sqlite
                           sqlite2
                           ibase
                         (drivers marked with a '+' have been detected as 
                         available on this system)
 
    -system-sqlite ..... Use sqlite from the operating system.
 
    -no-opengl ......... Do not support OpenGL.
    -opengl <api> ...... Enable OpenGL support with specified API version.
                         Available values for <api>:
                           desktop - Enable support for Desktop OpenGL
                           dynamic - Enable support for dynamically loaded 
                         OpenGL (either desktop or ES)
 *                         es2 - Enable support for OpenGL ES 2.0
 
 *  -no-openvg ......... Disables OpenVG functionality.
    -openvg ............ Enables OpenVG functionality.
 
    -force-asserts ..... Activate asserts in release mode.
 
    -platform <spec> ... The operating system and compiler you are building on.
                         (default %QMAKESPEC%)
 
    -xplatform <spec> .. The operating system and compiler you are cross 
                         compiling to.
 
                         See the README file for a list of supported operating 
                         systems and compilers.
 
    -target ............ Set target OS version. Currently the only valid value 
                         is 'xp' for targeting Windows XP.
                         MSVC >= 2012 targets Windows Vista by default.
 
    -sysroot <dir> ..... Sets <dir> as the target compiler's and qmake's 
                         sysroot and also sets pkg-config paths.
    -no-gcc-sysroot .... When using -sysroot, it disables the passing of 
                         --sysroot to the compiler.
 
    -qconfig <local> ... Use src/corelib/global/qconfig-<local>.h rather than 
                         the
                         default 'full'.
 
 *  -no-nis ............ Do not compile NIS support.
    -nis ............... Compile NIS support.
 
    -no-iconv .......... Do not enable support for iconv(3).
 +  -iconv ............. Enable support for iconv(3).
 +  -sun-iconv ......... Enable support for iconv(3) using sun-iconv.
 +  -gnu-iconv ......... Enable support for iconv(3) using gnu-libiconv.
 
    -no-evdev .......... Do not enable support for evdev.
 +  -evdev ............. Enable support for evdev.
    -no-mtdev .......... Do not enable support for mtdev.
 +  -mtdev ............. Enable support for mtdev.
 +  -inotify ........... Explicitly enable Qt inotify(7) support.
    -no-inotify ........ Explicitly disable Qt inotify(7) support.
 
 +  -eventfd ........... Enable eventfd(7) support in the UNIX event loop.
    -no-eventfd ........ Disable eventfd(7) support in the UNIX event loop.
 
 *  -largefile ......... Enables Qt to access files larger than 4 GB.
 
    -fontconfig ........ Build with FontConfig support.
 *  -no-fontconfig ..... Do not build with FontConfig support.
 
    -posix-ipc ......... Enable POSIX IPC.
 
    -glib .............. Compile Glib support.
 
    -sysconfdir <dir> .. Settings used by Qt programs will be looked for in
                         <dir>.
 
    -system-proxies .... Use system network proxies by default.
 *  -no-system-proxies . Do not use system network proxies by default.
 
 +  -warnings-are-errors Make warnings be treated as errors.
    -no-warnings-are-errors Make warnings be treated normally.
    -qtnamespace <name> Wraps all Qt library code in 'namespace name {...}'.
    -qtlibinfix <infix> Renames all Qt* libs to Qt*<infix>.
 
    -D <define> ........ Add an explicit define to the preprocessor.
    -I <includepath> ... Add an explicit include path.
    -L <librarypath> ... Add an explicit library path.
    -l <libraryname> ... Add an explicit library name, residing in a 
                         librarypath.
 
    -help, -h, -? ...... Display this information.
 
Third Party Libraries:
 
    -qt-zlib ........... Use the zlib bundled with Qt.
 +  -system-zlib ....... Use zlib from the operating system.
                         See http://www.gzip.org/zlib
 
    -qt-pcre ........... Use the PCRE library bundled with Qt.
 +  -system-pcre ....... Use the PCRE library from the operating system.
                         See http://pcre.org/
 
    -icu ............... Use the ICU library.
 *  -no-icu ............ Do not use the ICU library.
                         See http://site.icu-project.org/
 
    -no-gif ............ Do not compile GIF reading support.
 
    -no-libpng ......... Do not compile PNG support.
    -qt-libpng ......... Use the libpng bundled with Qt.
 +  -system-libpng ..... Use libpng from the operating system.
                         See http://www.libpng.org/pub/png
 
    -no-libjpeg ........ Do not compile JPEG support.
    -qt-libjpeg ........ Use the libjpeg bundled with Qt.
 +  -system-libjpeg .... Use libjpeg from the operating system.
                         See http://www.ijg.org
 
    -no-freetype ....... Do not compile in Freetype2 support.
 *  -qt-freetype ....... Use the libfreetype bundled with Qt.
    -system-freetype ... Use the libfreetype provided by the system.
    -no-harfbuzz ....... Do not compile in HarfBuzz-NG support.
 *  -qt-harfbuzz ....... Use HarfBuzz-NG bundled with Qt to do text shaping.
                         It can still be disabled by setting
                         the QT_HARFBUZZ environment variable to "old".
    -system-harfbuzz ... Use HarfBuzz-NG from the operating system
                         to do text shaping. It can still be disabled
                         by setting the QT_HARFBUZZ environment variable to 
                         "old".
                         See http://www.harfbuzz.org
 
 +  -angle ............. Use the ANGLE implementation of OpenGL ES 2.0.
    -no-angle .......... Do not use ANGLE.
                         See http://code.google.com/p/angleproject/
 
 
Qt for Windows only:
 
    -no-incredibuild-xge Do not add IncrediBuild XGE distribution commands to 
                         custom build steps.
 +  -incredibuild-xge .. Add IncrediBuild XGE distribution commands to custom 
                         build steps. This will distribute MOC and UIC steps, 
                         and other custom buildsteps which are added to the 
                         INCREDIBUILD_XGE variable.
                         (The IncrediBuild distribution commands are only added
                         to Visual Studio projects)
 
 *  -no-plugin-manifests Do not embed manifests in plugins.
    -plugin-manifests .. Embed manifests in plugins.
 
    -no-qmake .......... Do not compile qmake.
 *  -qmake ............. Compile qmake.
 
    -qreal [double|float] typedef qreal to the specified type. The default is 
                          double.
                          Note that changing this flag affects binary 
                          compatibility.
 
    -no-rtti ........... Do not compile runtime type information.
 *  -rtti .............. Compile runtime type information.
    -no-strip .......... Do not strip libraries and executables of debug info 
                         when installing.
 *  -strip ............. Strip libraries and executables of debug info when 
                         installing.
 
    -no-sse2 ........... Do not compile with use of SSE2 instructions.
 +  -sse2 .............. Compile with use of SSE2 instructions.
    -no-sse3 ........... Do not compile with use of SSE3 instructions.
 +  -sse3 .............. Compile with use of SSE3 instructions.
    -no-ssse3 .......... Do not compile with use of SSSE3 instructions.
 +  -ssse3 ............. Compile with use of SSSE3 instructions.
    -no-sse4.1 ......... Do not compile with use of SSE4.1 instructions.
 +  -sse4.1 ............ Compile with use of SSE4.1 instructions.
    -no-sse4.2 ......... Do not compile with use of SSE4.2 instructions.
 +  -sse4.2 ............ Compile with use of SSE4.2 instructions.
    -no-avx ............ Do not compile with use of AVX instructions.
 +  -avx ............... Compile with use of AVX instructions.
    -no-avx2 ........... Do not compile with use of AVX2 instructions.
 +  -avx2 .............. Compile with use of AVX2 instructions.
 
    -no-ssl ............ Do not compile support for SSL.
 +  -ssl ............... Enable run-time SSL support.
    -no-openssl ........ Do not compile support for OpenSSL.
 +  -openssl ........... Enable run-time OpenSSL support.
    -openssl-linked .... Enable linked OpenSSL support.
 
    -no-libproxy ....... Do not compile in libproxy support.
 +  -libproxy .......... Compile in libproxy support (for cross compilation 
                         targets).
 
    -no-dbus ........... Do not compile in D-Bus support.
 +  -dbus .............. Compile in D-Bus support and load libdbus-1
                         dynamically.
    -dbus-linked ....... Compile in D-Bus support and link to libdbus-1.
 
    -no-audio-backend .. Do not compile in the platform audio backend into
                         Qt Multimedia.
 +  -audio-backend ..... Compile in the platform audio backend into Qt 
                         Multimedia.
 
    -no-wmf-backend .... Do not compile in the windows media foundation backend
                         into Qt Multimedia.
 +  -wmf-backend ....... Compile in the windows media foundation backend into 
                         Qt Multimedia.
 
    -no-qml-debug ...... Do not build the in-process QML debugging support.
 *  -qml-debug ......... Build the in-process QML debugging support.
 
 *  -no-directwrite .... Do not build support for DirectWrite font rendering.
    -directwrite ....... Build support for DirectWrite font rendering (requires
                         DirectWrite availability on target systems, e.g. 
                         Windows Vista with Platform Update, Windows 7, etc.)
 
 *  -no-direct2d ....... Do not build the Direct2D platform plugin.
    -direct2d .......... Build the Direct2D platform plugin (experimental,
                         requires Direct2D availability on target systems,
                         e.g. Windows 7 with Platform Update, Windows 8, etc.)
 
    -no-style-<style> .. Disable <style> entirely.
    -qt-style-<style> .. Enable <style> in the Qt Library.
                         Available styles: 
 *                         windows
 +                         windowsxp
 +                         windowsvista
 *                         fusion
                           windowsce
                           windowsmobile
 
    -no-native-gestures Do not use native gestures on Windows 7.
 *  -native-gestures ... Use native gestures on Windows 7.
 
 *  -no-mp ............. Do not use multiple processors for compiling with MSVC
    -mp ................ Use multiple processors for compiling with MSVC (-MP).
 
    -loadconfig <config> Run configure with the parameters from file configure_
                         <config>.cache.
    -saveconfig <config> Run configure and save the parameters in file 
                         configure_<config>.cache.
    -redo .............. Run configure with the same parameters as last time.
 
Qt for Windows CE only:
 
 *  -no-crt ............ Do not add the C runtime to default deployment rules.
    -qt-crt ............ Qt identifies C runtime during project generation.
    -crt <path> ........ Specify path to C runtime used for project generation.
 
    -no-cetest ......... Do not compile Windows CE remote test application.
 +  -cetest ............ Compile Windows CE remote test application.
 
    -signature <file> .. Use <file> for signing the target project.

参考にした記事

Visual Studio 2015でQt5.5を使う – Qiita

http://qiita.com/nct_nct/items/d2e0de032353988bfe7e

Windows 7でQt5.4.0をビルドする。その1(Qtのインストール) – Qiita

http://qiita.com/Chironian/items/2da05e9df4db9ba0d8ec

Windows 7でQt5.4.0をビルドする。その2(Qt 64bitビルド) – Qiita

http://qiita.com/Chironian/items/acb465f388aa75f5d6a5

Windows + Visual Studio で Static Link できる Qt をビルドする – Qiita

http://qiita.com/informationsea/items/df2775c325769d6f56b3

Building Qt5 with Visual Studio 2012 / Visual Studio 2013, and integrating with the IDE

http://stackoverflow.com/questions/15826893/building-qt5-with-visual-studio-2012-visual-studio-2013-and-integrating-with