【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號