【UEFI】关于EDK2中的增量编译
✅ 一、EDK2 的增量编译机制
EDK2 使用 BaseTools 中的 build 命令来进行编译,其内部维护了一个类似缓存机制,避免重复构建未修改的模块:
-
它通过检查每个模块的源代码、INF 文件、DEC 文件、DSC 文件等的时间戳来判断是否需要重新编译。
-
如果某个模块的依赖文件没有变化,它会跳过重新编译这个模块。
-
比如你只改了一个
.c文件,那么理论上只会重新编译对应的.obj,再链接成.dll或.efi。
尽管 EDK2 支持增量编译,但以下风险需要注意:
⚠️ 二、增量编译的风险
1. 修改依赖但未触发重编译
- 例如,修改了某个
.h头文件,其他引用它的模块可能没有被标记为需要重编译(取决于引用方式)。 - 这就可能导致使用旧版本接口、结构体不一致等 隐藏 bug。
2. 工具链或 BaseTools 变更
- 更换了 GCC、CLANG 或 VS 版本,或者更新了 BaseTools,缓存机制不会自动处理这些变化,可能造成编译行为不一致。
3. 宏定义或编译选项变更
- 改动了
.dsc、.fdf或target.txt中的设置(如DEBUG、RELEASE、Pcd 等),如果没清理中间文件,可能链接出错或逻辑异常。
| 情况 | 建议操作 |
|---|---|
小改动,如 .c 文件 |
可以直接 build,无需清理 |
改动 .h 或 .inf |
最好 clean 再 build,更安全 |
改动 DEC/DSC/FDF |
建议做完整 clean build |
| 不确定改了哪些东西 | 使用 build -c 全清理再编译 |

浙公网安备 33010602011771号