Qt 6 中的构建系统变更
Qt 6 的许多开发工作都与 Qt 及其模块的构建方式有关。其目标是通过转向一种被广泛采用且广受欢迎的构建工具——CMake,使 Qt 具备面向未来的能力。
从源代码构建 Qt
Qt 5 的构建系统基于qmake 构建。在 Qt 6 中,我们将构建系统移植到了 CMake 上。
注意:此变更 仅影响希望从源代码构建 Qt 的用户。您仍然可以使用 qmake 作为应用程序的构建工具。
可以通过调用cmake 直接在命令行上配置 Qt。不过,我们仍然推荐使用configure命令行工具,它提供了更友好的界面,并具备额外的错误检查功能。
有关新 configure API 的概述,请参阅Qt 配置选项。
CMake 和 Ninja 作为外部依赖项
您需要较新版本的CMake来配置和构建 Qt。对于 Qt 6.0,我们要求使用CMake 3.16。从 Qt 6.2 开始,当将 Qt 构建为静态库时,我们要求使用CMake 3.21。 从 Qt 6.6 开始,在为 Apple 平台构建 Qt 时,需要CMake 3.21.1。 从 Qt 6.9 开始,我们要求使用CMake 3.22。从 Qt 6.12 开始,我们要求使用CMake 3.25。您还必须安装最新版本的Ninja工具。
CMake 和 Ninja 都是开源工具,可通过多种方式安装。您也可以从Qt Online Installer 下载使用。
有关不同平台上构建要求的更详细概述,请参阅《构建 Qt 源代码》。
选择 Qt 许可证
在 Qt 5 中,configure 会要求您选择计划在商业许可还是开源许可下使用 Qt。如果您拥有多个商业许可,还必须选择希望使用的许可。
我们在 Qt 6 中移除了这两项选择。您可使用的许可证取决于您与The Qt Company 签订的任何法律合同,而非任何构建产物。
在 Qt 6 中,configure 选项-opensource、-commercial 和-confirm-license将被忽略,并且可能会在未来的 Qt 版本中被移除。
重新运行 configure
有时您可能需要重新运行 `configure` 来测试不同的配置选项。在 Qt 5 中,`configure` 会在两次运行之间缓存环境中的各种信息,但在其他方面仍从干净状态开始:您必须使用`-redo` 选项,或使用`config.status`壳脚本,才能复用上次运行时的参数。 您还可以使用-recheck、-recheck-all选项强制重新评估缓存的测试。
在 Qt 6 中,CMake(以及相应的 configure)会更彻底地缓存结果。 检测到的环境设置,以及通过其他命令行参数所做的选择,都会存储在一个名为CMakeCache.txt 的文件中。如果您使用新选项运行 configure,这些新选项会被合并到该文件中。删除该文件即可从头开始。上述 configure 选项现已不再受支持。
仅构建 Qt 的部分组件
Qt 5 的构建系统允许您在子目录中运行构建工具(例如make ),以进行部分重新构建。
CMake 遵循不同的范式,要求您从顶级目录构建目标,并考虑整个构建过程。使用 `ninja -t targets` 可查看构建中所有可用的目标。
解析第三方库
configure 的任务之一是检测环境中各种第三方软件包的可用性。在 Qt 5 中,configure 可选地使用 pkg-config 来完成此任务,但也采用了各种编译时测试。这些检查可以通过在命令行中设置ICU_PREFIX、ICU_LIBS 等变量来进行调整。
在 Qt 6 中,configure 依赖于 CMake 来解析依赖关系。对于大多数依赖关系,这要求第三方库在 CMake 搜索路径中提供一个 CMake 包。您可以使用CMAKE_PREFIX_PATH 变量将自定义位置添加到该路径中。
某些依赖项(如 OpenSSL)也会由 CMake 内部的逻辑自动检测:如果未检测到 OpenSSL,您可能需要设置OPENSSL_ROOT_DIR CMake 变量,使其指向安装目录。
选择工具链
在 Qt 5 中,configure 使用所谓的 mkspecs 来指定构建平台和目标平台(-platform、-xplatform 和-device选项)。CMake 不使用这些选项,而是依赖于环境检查和工具链文件(另请参阅CMake-toolchains 文档)。 -platform、-xplatform 选项仍然可用,但仅用于为生成的 qmake 工具设置默认值。
Qt 的交叉编译
交叉编译是指在某个计算机系统(宿主系统)上为另一个计算机系统(目标系统)编译代码的过程。用于交叉编译 Qt 应用程序的构建环境需要宿主系统上具备 Qt 工具(例如 moc、rcc),同时还需要为目标系统构建 Qt 库。
在 Qt 5 中,configure 允许您一步完成主机工具以及目标工具和库的构建。 在 Qt 6 中,此功能已不再受支持。取而代之的是,您必须先在主机上安装并运行 Qt,才能将 Qt 交叉编译到目标系统。此外,已安装的 Qt 版本必须与待交叉编译的版本一致。
有关交叉编译的更多详细信息,请参阅《配置嵌入式 Linux 设备》、《Qt for Android - 从源代码构建》和《Qt for iOS - 从源代码构建》。
移植 Qt 插件和附加库
虽然 qmake 仍支持构建 Qt 应用程序,但已无法用于编译自定义 Qt 插件,或依赖 Qt 5 构建系统内部机制的库。此类库或插件必须移植到 CMake,才能与 Qt 6 配合使用。
在 Qt 6.0 发布时,用于构建自定义 Qt 插件或库的 API 仍处于技术预览阶段,这意味着它在未来版本中可能会发生变化。公开的稳定版 API 将在后续的 Qt 6 版本中提供。
相关主题
- Qt 6 中 Qt 模块的变更- Qt 模块中 API 变更列表
- 受支持模块的变更- Qt 6.0 中 Qt 5 模块的状态
- Qt 5 与 Qt 6 的兼容性- 使用 Qt 5 和 Qt 6 构建应用程序
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.