configure是一個命令行工具,用於配置Qt編譯到指定平台。configure必須運行於Qt源碼根目錄。當運行configure時,編譯源碼使用的是所選工具鏈中的make工具。
一.源碼目錄、編譯目錄和安裝目錄
源碼目錄就是包含源碼的目錄。編譯目錄是包含Makefiles文件、object文件和其他中間文件的目錄。安裝目錄是二進制文件和庫文件安裝的目錄。
當編譯目錄和源碼目錄不一樣時,稱為影子編譯(shadow build),比如說,Qt Creator默認是使用影子編譯來編譯工程的。這里也可以使用影子編譯,方法就是新建一個目錄,然后cd到該目錄中運行configure,如下所示。
- mkdir ~/qt-build
- cd ~/qt-build
- ~/qt-source/configure
此時,configure時生成的Makefiles文件,以及編譯時生成的中間文件都會拷貝到qt-build目錄。不僅如此,通過影子編譯,可以同時進行多個不同配置選項的編譯過程,互不影響。
默認的安裝目錄和平台相關,但是在configure時,可以通過-prefix選項指定安裝目錄,比如./configure -prefix /opt/Qt-5.7。這樣一來,在執行make install指令時,編譯完成的bin、lib或者其他子目錄就會拷貝到/opt/Qt-5.7目錄中。
二.包含和排除Qt模塊
通過configure,可以包含或排除指定的Qt模塊。需要注意的是,許多模塊依賴於其他的模塊,不恰當的配置選項會導致依賴問題。
1.排除Qt模塊
使用configure的-skip選項可以排除Qt模塊,一般情況下模塊名就是源碼目錄中對應的子目錄名。有些子目錄會包含多個模塊,比如說qtconnectivity目錄就包含了Qt NFC模塊和Qt Bluetooth模塊,排除這兩個模塊需要將-skip qtconnectivity作為配置參數,如下所示。
- ./configure -skip qtconnectivity
2.包含或排除特性
-feature-<feature> 和 -no-feature-<feature>選項用於包含和排除特性。可用的<feature>都被羅列在tbase/src/corelib/global/qfeatures.txt文件中。比如,要禁用accessibility特性,可用使用-no-feature-accessibility選項,如下所示。
- ./configure -no-feature-accessibility
三.第三方庫
Qt源碼中包含了一些第三方庫,如果想使用Qt自帶的第三方庫,可用通過-qt配置;如果想使用系統中的第三方庫,可用通過-system配置。下表中列出一些第三方庫及其配置選項。
Library Name | Bundled in Qt | Installed in System |
---|---|---|
zlib | -qt-zlib |
-system-zlib |
libjpeg | -qt-libjpeg |
-system-libjpeg |
libpng | -qt-libpng |
-system-libpng |
xcb | -qt-xcb |
-system-xcb |
xkbcommon | -qt-xkbcommon |
-system-xkbcommon |
freetype | -qt-freetype |
-system-freetype |
PCRE | -qt-pcre |
-system-pcre |
HarfBuzz-NG | -qt-harfbuzz |
-system-harfbuzz |
當然,也可以禁用這些第三方庫,用-no替換-qt就行,如下所示。
- ./configure -no-zlib -qt-libjpeg -qt-libpng -system-xcb
四.編譯選項
-platform選項指定了目標平台和編譯時使用的編譯器,Qt支持的平台和編譯器都在qtbase/mkspecs目錄中。比如,在Ubuntu Linux系統中,Qt能被多種編譯器編譯,比如clang和g++,如下所示。
- ./configure -platform linux-clang
- ./configure -platform linux-g++
- ./configure -platform linux-g++-32
對於Windows系統,可以用MinGW或者Visual Studio工具鏈,如下所示。
- configure.bat -platform win32-g++
- configure.bat -platform win32-msvc2010
五.交叉編譯選項
通用的選項如下所示。
-xplatform:指定目標平台,可用的xplatform與platform類似,也在qtbase/mkspecs目錄中。
-device:指定特殊的設備或芯片,configure兼容的device在qtbase/mkspecs/devices目錄中。
-device-option:設置額外的qmake參數,比如,-device-option CROSS_COMPILE=<path-to-toolchain>提供了特定設備交叉編譯所需的環境變量。
六.Windows中使用OpenGL選項
在Windows中,Qt可以配置使用系統的OpenGL或者自帶的ANGLE。默認情況下,Qt會配置使用ANGLE,ANGLE依賴於DirectX SDK。ANGLE使得依賴於OpenGL的Qt應用程序可以在沒有安裝OpenGL的機器上運行。
-opengl選項可以配置Qt使用目標機器上的OpenGL,如下所示。
- configure.bat -opengl desktop
desktop選項告知Qt使用Windows上的OpenGL,當然前提是要求Windows上的OpenGL與Qt兼容。
-opengl選項支持兩個版本的OpenGL ES,一個是es2,一個是es1,如下所示。
- configure.bat -opengl es2
七.configure -h
configure -h與configure -help功能相同,顯示所有配置選項。以下是Windows上Qt5.7.0的配置選項。
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 onthe host machine. If [dir] is not given,
the current builddirectory 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)
-optimized-tools ... Build optimized host tools even in debug build.
* -no-optimized-tools Do not build optimized host tools even in debug build.
-opensource ........ Compile and link the Open-Source Edition of Qt.
-commercial ........ Compile and link the Commercial Edition of Qt.
-C++std <edition> .. Compile Qt with C++ standard edition (c++11, c++14, c++1z)Default: highest supported.
This option is notsupported for MSVC.
-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,list containslibs,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 willbreak
QStyle and may break other internal parts of Qt.With this switch you create a source
incompatibleversion 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 asavailable 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 loadedOpenGL (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 operatingsystems 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.
-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.
-no-pch ............ Do not use precompiled header support.
* -pch ............... Use precopmiled header support.
-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-doubleconversion Use sscanf_l and snprintf_l for (imprecise) double con version.
-qt-doubleconversion Use the libdouble-conversion bundled with Qt.
-system-doubleconversion Use the libdouble-conversion provided by the system.
-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.
-fontconfig ........ Build with FontConfig support.
* -no-fontconfig ..... Do not build with FontConfig support.
-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 settingthe
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 theINCREDIBUILD_XGE
variable.(The IncrediBuild distribution commands are only addedto 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-avx512 ......... Do not compile with use of AVX512 instructions.
+ -avx512 ............ Compile with use of AVX512 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-linked ....... Compile in D-Bus support and link to libdbus-1.
-dbus-runtime ...... Compile in D-Bus support and load libdbus-1 dynamically.
-no-audio-backend .. Do not compile in the platform audio backend into Qt Multimedia.
+ -audio-backend ..... Compile in the platform audio backend into Qt 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.
* -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
-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.
-v, -verbose ....... Run configure tests with verbose output.
http://blog.csdn.net/caoshangpa/article/details/53706801