构建优化的 Qt

本页描述了根据您的特定需求配置和构建更小的定制版 Qt 的过程。

第 1 步:获取源代码、安装构建要求和设置环境

关于获取源代码、安装依赖项和设置环境,请参阅特定平台的说明:

步骤 2:构建 Qt 库和工具

按照特定平台的说明,使用以下Qt 配置选项,创建适合您需求的构建。

下表详细描述了有助于减少构建大小的配置选项。

Qt 配置选项说明
-静态生成用于静态链接的归档文件。静态二进制文件在链接时,会将所有必要的库和依赖项嵌入可执行文件本身。这意味着当你运行程序时,它将使用自己内部所需库的副本,而不是依赖外部库。这样,链接器就可以放弃二进制代码中不必要的部分。这是单个可执行文件交付的最佳解决方案。
-链接时间优化(LTO链接时间优化(LTO)是一项功能强大的技术,通过在链接阶段分析和优化二进制代码,可以显著提高性能并减小可执行文件的大小。
-减少导出符号减少导出符号的数量。
-gc-二进制文件删除二进制代码中不必要的部分。将每个函数或数据项放入自己的部分,并启用链接器对未使用部分进行垃圾回收。
-子模块 qtbase,qtdeclarative,qtqmlscriptcompiler,qtsvg要编译的子模块。限制对不必要功能的依赖。
-跳过 qtlanguageserver,qtquicktimeline从编译中删除自动包含的子模块。限制对不需要的功能的依赖。
-disable-deprecated-up-to<版本移除过时的实现。

QT_DISABLE_DEPRECATED_UP_TO 的值设置为 <version>。QT_DISABLE_DEPRECATED_UP_TO 用于删除 API 和 ABI 中已废弃的方法。<version> 是十六进制值。例如,使用 0x070000 可移除 Qt 7.0.0 或更早版本中已废弃的所有代码。默认情况下,<version> 在 Windows 和非 Windows 环境下分别设置为 0x040000 和 0x050000。

此外,您还可以按照Including or excluding features(包含或排除特性)中的说明逐一删除特性。这可能会对可用组件和功能造成限制。并非所有组合都经过测试。Qt会在持续集成 (CI) 中测试特定的配置选项组合。该配置选项组合能够运行简单的 QML 应用程序。

Qt configure 命令还支持 - -(双破折号)命令行参数,允许用户注入额外的 CMake 参数,如 -DCMAKE_CXX_FLAGS="-march=native"。在交叉编译时,这些参数可通过 -DCMAKE_TOOLCHAIN_FILE=path/to/toolchain.cmake 添加,如《工具链文件示例》中所述。下表列出了一些可以考虑与 GCC 配合使用的选项:

编译器选项说明
-march <arch目标架构。如果应用程序在与编译时相同的架构上执行,则使用 "本地"。
-mtune <tune告诉编译器利用指定处理器架构的特性(如指令集、寄存器数量和高速缓存层次结构)生成代码。
-fno-asynchronous-unwind-tables减少二进制文件大小。请注意,禁用异步解卷表可能会影响代码的性能、兼容性和可维护性。一般建议仅在必要时使用该选项,并仔细考虑其潜在影响。
-fno-unwind-tables减少二进制文件的大小。请注意,禁用解卷表可能会影响代码的性能、兼容性和可维护性。一般建议仅在必要时使用该选项,并仔细考虑其潜在影响。

值得注意的是,-fno-unwind-tables-fno-asynchronous-unwind-tables 的更激进版本,因为它完全禁止创建解卷表,而后者仅禁止异步生成解卷表。

-禁止框架指针减少二进制文件大小。启用该选项后,编译器不会为每次函数调用在堆栈中存储帧指针。相反,编译器会使用堆栈指针作为帧指针,这样可以节省内存并提高性能。值得注意的是,某些编译器(如 GCC 和 Clang)在针对某些架构(如 ARM 和 PowerPC)或在某些优化模式下编译时,会默认启用-fomit-frame-pointer
-fno-exceptions减小二进制文件大小。启用该选项后,编译器不会为 try-catch 块生成代码,任何抛出或捕获异常的尝试都会导致运行时错误。Qt 本身无需异常即可运行,但某些依赖项可能需要异常。
-无派减小二进制文件的大小。一般来说,-fno-pie 应谨慎使用,只有在必要时才使用,因为它可能会影响编译代码的兼容性和性能。与位置无关的可执行文件还能增加安全性。有关位置无关代码的更多信息,请参阅维基百科中的地址空间布局随机化

下表列出了链接器选项:

链接器选项说明
-无派减小二进制文件大小。一般来说,-fno-pie 应谨慎使用,只有在必要时才使用,因为它可能会影响编译后代码的兼容性和性能。独立于位置的可执行文件还能增加安全性。有关位置无关代码的更多信息,请参阅维基百科中的地址空间布局随机化

步骤 3:构建应用程序

安装 Qt 后,您就可以开始使用它构建应用程序了。

使用 CMake 项目命令优化 QML 代码生成。有关 QML 代码生成的更多信息,请参阅qt_add_qml_moduleBest Practices for QML andQt Quick

以下 CMake 代码片段中的命令可缩小二进制文件的大小:

set_target_properties(
        ExampleApp
    PROPERTIES
        QT_QMLCACHEGEN_ARGUMENTS "--only-bytecode"
)

如果您计划在集成开发环境中构建应用程序,则需要在其中明确注册 Qt 版本。有关Qt Creator ,请参阅Qt Creator: 添加 Qt 版本

如果使用命令行构建应用程序,请遵循特定平台指南。

© 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.