為何 C++ 編譯較慢?
C++ 需處理 `#include` 遞迴展開、模板實例化、符號表建立,每個 `.cpp` 獨立編譯時重複解析標頭檔。Delphi 單元介面/實作分離、介面只編譯一次,故極快。
PCH 原理
將常用、穩定的標頭檔 (如 ``, ``, 專案通用頭) **預先編譯為二進位中間檔** (`.pch`/`.csm`),後續編譯直接載入記憶體映像,跳過詞法/語法分析。
BCB 專案啟用 PCH 步驟
- 專案選項 → Compiler → **Use pre-compiled headers** = **True**。
- 建立/指定 PCH 標頭檔 (預設 `vcl.h` 或專案同名 `.h`),內容通常為:
#ifndef Project1H
#define Project1H
#include
// 專案通用標頭...
#endif
- 確保 **所有 `.cpp` 第一行** `#include "Project1.h"` (或 PCH 檔名),且 **不在此前有任何代碼/註解**。
- Build All → 首次產生 `.csm`,後續編譯大幅加速。
優化建議
- **只放穩定、通用** 的標頭進 PCH (VCL、STL、Windows SDK、專案公共介面)。頻繁變動的標頭**勿放入**,否則頻繁重建 PCH 反而拖慢。
- 大型專案可建立多個 PCH (如 `CorePCH.h`, `UIPCH.h`),不同模組引用不同 PCH。
- 清理專案時勾選「刪除預編譯標頭」強制重建。
效果
典型 VCL 專案啟用 PCH 後,**重建速度提升 3-10 倍**,增量編譯幾乎秒級。