整合建置
整合建置是一種減少建置時間的技術。它的運作方式相對簡單。假設我們有原始碼檔案 src1.c
、src2.c
和 src3.c
。正常情況下,我們會執行編譯器三次,每個檔案一次。在整合建置中,我們會將所有這些原始碼編譯在一個單一的單元中。最簡單的方法是建立一個新的原始碼檔案,如下所示。
#include<src1.c>
#include<src2.c>
#include<src3.c>
然後編譯此檔案,而不是個別的檔案。加速的確切幅度當然取決於程式碼庫,但在編譯時間中獲得超過 50% 的加速並不少見。即使整合建置只使用一個 CPU,而個別編譯可以並行執行,也會發生這種情況。整合建置也可能導致更快的程式碼,因為編譯器可以進行更積極的優化(例如內聯)。
缺點是增量建置與完整重新建置一樣慢(因為它們實際上就是這樣)。整合編譯也會使用更多記憶體,這在某些情況下可能會成為問題。原始碼中可能還存在一些錯誤,需要先修復才能使整合編譯正常工作。例如,如果 src1.c
和 src2.c
都包含一個具有相同名稱的靜態函式或變數,則會發生衝突。
Meson 內建支援整合建置。要啟用它們,只需在命令列上傳遞 --unity on
或在您的專案 default_options 中啟用整合建置。除了上面討論的潛在衝突問題外,不需要任何程式碼變更。Meson 會自動為您生成所有必要的包含檔案。
您可以使用 override_options
參數來修改給定建置目標的整合設定。當建置目標與整合建置不相容時,這可能很有用。
unity
選項也可以使用 subprojects
值,以整合方式建置子專案,同時增量建置主專案。
unity_size
選項允許指定每個整合檔案中包含的原始碼檔案數量。預設值為 4。每個整合檔案包含更多原始碼檔案將加速完整建置,但會減慢增量建置。若要每個建置目標僅取得一個整合檔案,您可以使用非常大的 unity_size
數字。
搜尋結果為