Qt 6 中构建系统的变化
Qt 6 的许多工作都与 Qt 及其模块的构建方式有关。我们的目标是让 Qt 面向未来,转而采用一种广泛采用的流行构建工具:CMake。
从源代码构建 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。您还必须安装最新版本的Ninja工具。
CMake 和 Ninja 都是开源工具,可以通过各种方式安装。它们也可在Qt Online Installer 中找到。
请参阅 "构建 Qt 源代码",了解不同平台上构建要求的详细概述。
选择 Qt 许可证
在 Qt 5 中,configure 要求您选择计划在商业或开源许可下使用 Qt。如果您有多个商业许可证,还必须选择希望使用的许可证。
我们在 Qt 6 中取消了这两项选择。您可以选择的许可证取决于您与Qt 公司签订的任何法律合同,而不是任何产品。
在 Qt 6 中,configure 选项-opensource、-commercial 和-confirm-license将被忽略,并可能在未来的 Qt 版本中删除。
重新运行 configure
有时您需要重新运行 configure 来测试不同的 configure 选项。在 Qt 5 中,configure 会在两次运行之间缓存环境中的各种信息,但除此之外,configure 会从干净的状态开始运行:你必须使用-redo,或使用config.statusshell 脚本,才能重新使用上次运行的参数。你还可以使用-recheck、-recheck-all选项来强制重新评估缓存的测试。
CMake 以及 Qt 6 中的 configure 会更积极地缓存结果。检测到的环境设置,以及通过其他命令行参数完成的选择,都存储在一个名为CMakeCache.txt 的文件中。如果使用新选项运行 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 中,Configuration Tool 可让您一步构建主机工具以及目标工具和库。在 Qt 6 中,不再支持这一功能。取而代之的是,在交叉编译 Qt 到目标机之前,您必须在主机上安装并运行 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 构建应用程序
© 2025 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.