Qt Configure Options
configure
是一个命令行工具, 它确定如何为特定平台构建 Qt. 配置可以排除 Qt 中的功能, 并确定 Qt 如何构建应用程序并将其部署到主机平台上. 本页讨论一些配置选项, 但要获取完整的选项列表, 输入命令 configure -h
. configure
工具应该在 Qt 源码目录运行.
除非另有说明, 本页中的命令适用于 Linux 平台. 在 macOS 和 Windows 上, 路径和目录结构不同, 因此命令会有所不同. 此外, 在 Windows 系统上, 配置脚本称为 configure.bat.
运行 configure
后, 使用所选工具链的 make
工具构建源代码.
Source, Build, and Install Directories
source 目录包含从源码包或git仓库获取的源代码. build 目录是存储与构建相关的文件 (例如, Makefile, 目标文件和其他中间文件). install 目录是安装二进制文件和库的目录, 供系统或应用程序使用.
我们建议你使用影子构建, 使用 -prefix
选项将源码目录和构建目录分离. 这样能保持 Qt 源代码树中不含构建文件和二进制文件, 这些构建文件和二进制文件存储在单独的目录中. 如果你想从同一个源码树进行多个构建, 但对于不同的配置, 此方法非常方便. 使用影子构建, 你需要在不同的目录运行 configure
:
mkdir ~/qt-build cd ~/qt-build ~/qt-source/configure -prefix /opt/Qt5.6 qmake
使用 -prefix
选项配置, 意味着 Qt 二进制文件和库将安装到另一个目录中, 上面的示例是 /opt/Qt5.6
. 运行 qmake
会在 ~/qt-build 目录中生成 Makefile, 而不是源码目录. 生成 Makefiles 后, 运行下列命令, 构建 Qt 二进制文件和库, 并安装它们:
make make install
注意: 仅当 Qt 配置了 -prefix 后, 才需要执行 'make install' 步骤, 除非使用 -developer-build 配置选项, 否则这是基于 Unix 平台的默认设置. 在 Windows 上, Qt 默认设置是没有 -prefix 版本.
注意: -developer-build
选项仅用于 Qt 开发, 而不用于发布应用程序. 此类构建包含比标准构建更多的导出符号, 并且以更高的警告级别进行编译.
Including and Excluding Qt Modules
通过配置, 可以在 Qt 构建中包含或排除特定的 Qt 模块. 但是, 请记住, 许多模块依赖于其他模块, 因此, 某些构建配置可能会出现依赖性问题.
Excluding a Qt Submodule
-skip
选项允许从 Qt 构建中排除某些 Qt 子模块. 这些子模块对应于标准 Qt 5 存储库中的 Git 子模块. 注意, 许多软件包含多个 Qt 模块. 例如, 要从 Qt 构建中排除 Qt NFC 和 Qt Bluetooth, 在 configure 参数中增加 -skip qtconnectivity
选项.
./configure -skip qtconnectivity
Including or Excluding Features
-feature-
<feature> 和 -no-feature-
<feature> 选项分别包括和排除特定功能, 其中 <feature> 在文件 qtbase/src/corelib/global/qfeatures.txt 中列出.
例如, 要禁用辅助功能 Accessibility, 参数是 -no-feature-accessibility
:
./configure -no-feature-accessibility
注意: qtbase 之外的功能不包含在功能列表中.
Third-Party Libraries
Qt 源码包含三方库. 要设置 Qt 是否应使用系统版本的库或使用捆绑版本, 请在要配置的库名称之前传递 -system
或 -qt
.
下表总结了第三方选项:
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
, 禁用某些库支持. 例如, 要使用系统的 xcb 库并禁用 zlib 支持, 请输入以下内容:
./configure -no-zlib -qt-libjpeg -qt-libpng -system-xcb
选项的完整列表, 参见 configure -help
.
Compiler Options
-platform
选项设置构建 Qt 源代码的主机平台和编译器. 支持平台和编译器列表参见 supported platforms, 完整列表可以在 qtbase/mkspecs 目录找见.
例如, 在 Ubuntu 系统上, Qt 可以由 clang 或 g++ 等多种编译器编译:
./configure -platform linux-clang ./configure -platform linux-g++ ./configure -platform linux-g++-32
在 Windows 上, 你可以使用 MinGW 或 Visual Studio 工具链编译 Qt.
configure.bat -platform win32-g++ configure.bat -platform win32-msvc2010
之后, 生成 Makefiles 将使用适当的编译器命令.
Cross-Compilation Options
要配置 Qt 跨平台开发和部署, 需要设置目标平台的开发工具链. 不同的 Supported Platforms 可能需要不同的配置.
常见选项有:
-xplatform
- 目标平台. 有效的 xplatform 选项与 qtbase/mkspecs 中的-platform
选项相同.-device
- 特定的设备或芯片. 兼容的设备列表可在 qtbase/mkspecs/devices 中找到. 详见 Devices.-device-option
- 配置额外的 qmake 变量. 如,-device-option CROSS_COMPILE=
<path-to-toolchain> 根据某些设备的需求提供CROSS_COMPILE
环境变量.
注意: 非桌面目标的工具链通常带有所谓的 sysroot, Qt需要进行针对性配置.
Specific Options for Platforms
The following pages provide guidelines on how to configure Qt for specific platform development:
- Building Qt 5 for Android Wiki page
- Qt for iOS - Building from Source
- Qt for WinRT - Building from Source
- Qt for Embedded Linux - Building from Source
- Qt for Raspberry Pi - a community-driven site for Raspberry devices
- Devices - a list of other devices and chipsets
OpenGL Options for Windows
在 Windows 上, Qt 可以选择使用系统 OpenGL 或 ANGLE. 默认情况下, Qt 配置为使用 ANGLE, 它与 Qt 捆绑在一起, 并依赖 DirectX SDK. ANGLE 允许运行依赖于 OpenGL 的 Qt 应用程序, 而无需安装最新的 OpenGL 库.
-opengl
选项可用于配置 Qt, 用于在目标系统上使用 OpenGL, OpenGL ES 的不同版本(是否使用 ANGLE), 或在可用的 OpenGL 实现之间动态切换.
configure.bat -opengl desktop
对于 desktop
选项, Qt 使用 Windows 上安装的 OpenGL, 要求目标计算机上安装的 OpenGL 与应用程序兼容. -opengl
选项接受两个版本的 OpenGL ES, 即 es2
(OpenGL ES 2.0) 或 es1
(OpenGL ES Common Profile).
configure.bat -opengl es2
你还可以使用 -opengl dynamic
, 它使应用程序能够在运行时在可用选项之间动态切换. 有关使用动态 GL 切换的好处, 参见 Graphics Drivers.