在 Qt Creator 中使用 LLVM LLD 链接器和ccache 加速编译加快构建流程
在大型 Qt 项目中,即便启用了增量编译,链接过程依旧可能成为构建瓶颈。默认的 GNU ld 链接器在处理海量符号和调试信息时表现单线程且缓慢。通过引入更高性能的 LLVM LLD(或者 GNU Gold)多线程链接器,我们可以显著降低链接耗时,让开发迭代更流畅。
1. 为什么要使用 LLVM LLD
-
多线程链接:LLD 天生支持并行处理多个输入文件,而 GNU
ld则通常是单线程。 -
更快的符号解析:LLD 对符号表和调试信息合并做了大量性能优化。
-
兼容性:对于大多数 Linux/Windows 平台,LLD 可以无缝替换默认
ld,并兼容绝大部分编译器选项。
Tip:在 Windows 上,同样可以考虑使用 GNU Gold 链接器,它也是多线程的高性能替代品。
2. 安装 LLVM LLD
-
下载 LLVM Windows 预编译包
-
打开官方 Release 页面:https://releases.llvm.org/download.html
-
在 Pre-Built Binaries / Windows 区域,选择最新版本的
LLVM-*-win64.exe(或者.zip压缩包)。
-
-
添加 LLD 到系统路径
-
安装完成或解压缩后,将
bin目录(包含lld.exe)加入到系统的PATH环境变量中。 -
在 命令行 中运行
lld --version,若正确输出版本信息,则配置成功。
-
3. 在 Qt Creator 中启用 LLD
编辑你的 .pro 文件,在末尾加入:
# 使用 LLVM LLD 作为链接器(前提:lld.exe 已在 PATH)
QMAKE_LFLAGS += -fuse-ld=lld
然后在 Qt Creator 中:
-
Clean Project(清理项目)
-
Build Project(构建项目)
此时,生成的 Makefile 会在链接命令里添加 -fuse-ld=lld,运行 lld 来替代默认的 ld。
4. 性能对比示例
测试环境:Intel 6 核 CPU,包含多模块静态库和全量调试信息的 200K 行代码 Qt 应用。
| 链接器类型 | 耗时(秒) | 相对速度 |
|---|---|---|
| GNU ld (单线程) | ~50 | 1× |
| LLVM LLD (6 核) | ~4 | ~12.5× |
上述数据基于在 Qt Creator 中单文件修改后的链接命令耗时对比(原 GNU ld 约 00:50,LLD 约 00:04)。


5. 常见问题与解答
-
Q: LLD 不在 PATH,如何指定绝对路径?
A: 直接在.pro中写:QMAKE_LFLAGS += -fuse-ld="C:/llvm/bin/lld.exe" -
Q: 其他平台可以用吗?
A: 在 Linux/macOS 下,同样可以安装 LLVM 工具链并加入-fuse-ld=lld参数。 -
Q: 如何切换回默认
ld?
A: 注释或删除上面那行QMAKE_LFLAGS即可。
6. 启用预编译头(PCH)
大型 Qt 项目中,频繁包含大量框架和第三方库头会拖慢单元编译速度。使用预编译头(PCH)可以将这些不常改动的头文件一次预处理并缓存,后续所有 .cpp 都直接跳过头解析。
步骤
-
创建 PCH 头:新建
stdafx.h,包含常用头:#ifndef STDAFX_H #define STDAFX_H // Qt umbrella headers #include <QtCore> #include <QtGui> #include <QtWidgets> // 模块头 #include <QSerialPortInfo> #include <QFileDialog> // 工具类 & 第三方库 #include "ModbusFloatConverter.h" #include "qcustomplot.h" #endif // STDAFX_H -
配置
.pro:在项目文件中添加:CONFIG += precompile_header PRECOMPILED_HEADER = stdafx.h -
使用 PCH:确保每个
.cpp文件开头第一行:#include "stdafx.h" -
首次全量编译 会生成
.pch文件,后续修改自身业务代码时,头文件解析时间几乎为零。
效果
-
单元编译:修改头依赖少的业务文件时,编译速度可从数秒降到毫秒级。
-
结合 LLD:预编译头加速编译,LLD 加速链接,整体迭代可缩至 2-5 秒 以内。
7. 总结
通过本文介绍的两大核心优化:
-
LLVM LLD 多线程链接:在
.pro中添加QMAKE_LFLAGS += -fuse-ld=lld,将链接时间从几十秒降至约 4 秒(6 核 CPU)。 -
PCH 预编译头:在
.pro中启用CONFIG += precompile_header并创建stdafx.h,单元编译由原来的数秒降至 毫秒级。
结合以上两项优化,你的 Qt 项目在“修改代码 → 构建”这一关键迭代流程中,将获得极大速度提升,助力高效开发体验。
第二种加快构建速度,使用Qt维护工具->自定义->Qt->Build Tools->LLVM-MinGW代替MinGW


作者:Li Zhiqiang

浙公网安备 33010602011771号