本頁說明如何使用巨集擴充 BUILD 語言 和規則
Bazel 擴充功能是結尾為 .bzl
的檔案。使用
load 陳述式,從擴充功能匯入符號。
學習更進階的概念之前,請先:
請參閱《Starlark 語言》;
BUILD
和.bzl
檔案。瞭解如何共用變數 介於兩個
BUILD
檔案之間
巨集和規則
巨集是一種可將規則例項化的函式。非常有用
有 BUILD
檔案重複或過於複雜,您可以重複使用這個檔案
部分程式碼。系統會在讀取 BUILD
檔案後立即評估該函式。更新後
Bazel 在評估 BUILD
檔案時,幾乎無法得知巨集的相關資訊:
如果您的巨集產生 genrule
,Bazel 會假設您寫入
genrule
。因此,bazel query
只會列出產生的 genrule
。
規則比巨集功能更強大。可以存取 Bazel 而且完全掌控所有內部運作狀況舉例來說 或其他規則的資訊
如要重複使用簡單的邏輯,請從巨集開始。如果巨集變成 通常建議您制定規則支援新語言 通常是以規則來完成規則適用於進階使用者 使用者也無需撰寫對話方塊則只會載入並呼叫 不過,編寫這類演算法並不容易 因為我們無法寫出所有可能的規則
評估模型
建構作業包含三個階段
載入階段:首先,請載入並評估所有擴充功能和
BUILD
建構所需的檔案只執行BUILD
檔案 將規則例項化 (每次呼叫規則時,系統都會在圖表中加入規則)。 這是評估巨集的位置。分析階段:系統執行規則的程式碼 (其
implementation
函式),和動作會例項化。動作可說明如何產生 一組輸入的輸出內容,例如「run gcc on hello.c and get」 hello.o。您必須明確列出將產生哪些檔案 實際執行指令換句話說,分析階段 並產生動作圖。執行階段:系統會於至少一項輸出內容 這通常代表交易 不會十分要求關聯語意如果檔案遺失或指令無法產生一個輸出內容 建構失敗測試也會在這個階段執行。
Bazel 會使用平行處理量讀取、剖析及評估 .bzl
檔案和 BUILD
檔案。每個建構作業最多讀取檔案一次,評估結果為
快取資料。系統只會評估檔案所有依附元件 (load()
)
陳述式) 所解決的問題。在設計上,載入 .bzl
檔案是不可見的
連帶效果,只會定義值和函式
Bazel 會嘗試取巧:運用依附性分析來瞭解哪些檔案必須 、必須分析哪些規則,以及必須執行的動作。適用對象 舉例來說,如果規則會產生目前版本不需要的動作 並不會執行
建立擴充功能
以下兩個連結在您撰寫自己的額外資訊時相當實用。保留 觸手可及: