Qt 6 筑系统变更
Qt 6 的大部分工作都与 Qt 和其模块的构建方式有关。目标是使 Qt 具有前瞻性,通过转向广泛采用、流行的构建工具:[CMake](https://cmake.org/cmake/help/latest/)。
从源码构建 Qt
Qt 5 的构建系统是基于 [qmake](qmake-manual.html) 构建的。在 Qt 6 中,我们将构建系统迁移到了 CMake。
注意:这仅影响想要从源码构建 Qt 的用户。您仍然可以使用 qmake 作为您应用程序的构建工具。
可以通过使用 cmake 在命令行中直接配置 Qt。然而,我们仍然建议继续使用 configure 命令行工具,它提供了一个可能更友好的界面,并提供了额外的错误检查。
有关新配置 API 的概述,请参阅[Qt 配置选项](configure-options.html)。
CMake、Ninja 作为外部依赖
您需要一个最新的 [CMake](https://cmake.org/cmake/help/latest/) 版本来配置和构建 Qt。对于 Qt 6.0,我们要求 CMake 3.16。从 Qt 6.2 开始,构建静态库时我们要求 CMake 3.21。从 Qt 6.6 开始,构建适用于 Apple 平台时我们要求 CMake 3.21.1。您还必须安装最新版本的 [Ninja](https://ninja-build.org/) 工具。
CMake 和 Ninja 都是开源工具,可以通过多种方式安装。它们也包含在 Qt 在线安装程序中。
有关不同平台构建要求的更详细概述,请参阅[构建 Qt 源代码](build-sources.html)。
选择 Qt 许可
在 Qt 5 中,配置需要您选择是否计划在商业或开源许可下使用 Qt。如果您有多个商业许可,您还必须选择您期望使用的许可。
我们在 Qt 6 中去除了这两个选择。您可用的许可类型取决于您与 [The Qt Company](http://www.qt.io/about-us/) 之间的任何法律合同,而不是任何艺术作品。
在 Qt 6 中忽略配置选项 -opensource、-commercial 和 -confirm-license,这些选项可能在 Qt 的未来版本中删除。
重新运行配置
有时您想要重新运行配置以测试不同的配置选项。在 Qt 5 中,配置会在运行之间缓存环境中的各种信息,但除此之外,它从干净的状态开始:您必须使用 -redo 或使用 config.status shell 脚本来重用上次运行的参数。您还可以使用 -recheck、-recheck-all 选项来强制重新评估缓存的测试。
CMake 及其用于 Qt 6 的配置在缓存结果方面更加积极。不仅检测到环境设置,而且还存储了通过其他命令行参数所做的选择,所有这些数据都存储在名为 CMakeCache.txt 的文件中。如果您使用新的选项运行配置,则新的选项将合并到该文件中。删除该文件从头开始。上述配置选项不再受支持。
仅构建 Qt 的部分
Qt 5 的构建系统允许您在子目录中运行构建工具(例如 make
),以进行部分重建。
CMake 采用不同的范式,需要您从顶级目录构建目标,考虑到整个构建流程。使用 ninja -t targets 查看所有可用的构建目标。
解决第三方库
配置任务之一是检测环境中不同第三方包的可用性。在 Qt 5 中,配置可选地使用了 pkg-config 执行此操作,但同时也使用了各种编译时测试。这些检查可以通过各种赋值进行修改,例如 ICU_PREFIX、ICU_LIBS 等。
在 Qt 6 中,配置依赖 CMake 来解决依赖关系。对于大多数依赖关系,这要求第三方库在 CMake 搜索路径中提供一个 CMake 包。您可以使用 CMAKE_PREFIX_PATH
变量将自定义位置扩展到此路径。
某些依赖关系,如 OpenSSL,也由 CMake 内部的逻辑检测:如果未找到 OpenSSL,您可能需要设置 OPENSSL_ROOT_DIR
CMake 变量,以便它指向安装目录。
选择工具链
在 Qt 5 中,配置使用所谓的 mkspecs 来指定构建和目标平台(-platform、-xplatform 和 -device 选项)。CMake 不使用这些,而是依赖于环境检查和工具链文件(另请参阅 CMake-toolchains 文档)。-platform、-xplatform 选项仍然可用,但只用于设置生成 qmake 工具的默认值。
交叉编译 Qt
交叉编译是指在一种计算机系统(目标)上为另一种系统(主机)编译代码的行为。用于交叉编译 Qt 应用程序的开发环境要求 Qt 工具在主机(例如,moc、rcc)上可用,以及为目标构建 Qt 库。
在 Qt 5 中,配置允许您在一次操作中构建主机工具和目标工具及库。在 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仍处于技术预览阶段,这意味着它在未来的版本中可能仍然会发生变化。将在后续的Qt 6版本中提供公开的稳定API。
相关主题
- Qt 6中Qt模块的变化 - Qt模块中API变更列表
- 支持模块的变化 - Qt 6.0中Qt 5模块的状态
- Qt 5和Qt 6兼容性 - 同时构建Qt 5和Qt 6的应用程序
© 2024 Qt公司有限公司。本文件所含文档贡献的版权归各自的所有者所有。本文件提供的文档根据自由软件基金会发布的《GNU自由文档许可证》第1.3版条款授权。Qt及相应的标志是芬兰Qt公司及其在全球的子公司的商标。所有其他商标均为各自所有者的财产。