![]() |
預編譯標頭檔是一種加速編譯的機制,它會建立一些標頭檔的部分處理版本,然後在編譯期間使用該版本,而不是重複解析原始標頭檔。Boost.Build 支援 gcc 和 msvc 工具組的預編譯標頭檔。
要使用預編譯標頭檔,請遵循以下步驟
建立一個標頭檔,其中包含您專案使用的且您想要預編譯的標頭檔。最好只包含足夠穩定的標頭檔,例如來自編譯器和外部函式庫的標頭檔。請將標頭檔包在 #ifdef BOOST_BUILD_PCH_ENABLED
中,以便在未啟用 PCH 時不會執行可能耗時的標頭檔包含操作。將新的標頭檔包含在原始程式碼檔案的頂部。
為預編譯標頭檔宣告一個新的 Boost.Build 目標,並將該預編譯標頭檔新增到您想要加速編譯的目標的原始程式碼中。
cpp-pch pch : pch.hpp ; exe main : main.cpp pch ;
如果您想在 C 程式中使用預編譯標頭檔,可以使用 c-pch
規則。
Boost.Build 發行版中的 pch
範例可以用作參考。
請注意以下事項
包含預編譯標頭檔必須是原始程式碼檔案中的第一件事,在任何程式碼或前置處理器指令之前。
用於編譯原始程式碼檔案和預編譯標頭檔的建置屬性必須相同。考慮使用專案需求來確保這一點。
預編譯標頭檔必須純粹用作改善編譯時間的方法,而不是為了減少 #include
陳述式的數量。如果原始程式碼檔案需要包含某些標頭檔,請在原始程式碼檔案中明確地包含它,即使相同的標頭檔已從預編譯標頭檔中包含。這可確保即使不支援預編譯標頭檔,您的專案也能夠建置。
在 gcc 編譯器上,被預編譯的標頭檔的名稱必須與 cpp-pch
目標的名稱相同。這是 gcc 的要求。
在 4.2 版之前,gcc 編譯器不允許在預編譯標頭檔中使用匿名命名空間,這限制了它們的效用。詳情請參閱錯誤報告。