額外資訊總覽

回報問題 查看來源 夜間 7.2 7.1 7.0 6.5 6.4

本頁說明如何使用巨集擴充 BUILD 語言 和規則

Bazel 擴充功能是結尾為 .bzl 的檔案。使用 load 陳述式,從擴充功能匯入符號。

學習更進階的概念之前,請先:

巨集和規則

巨集是一種可將規則例項化的函式。非常有用 有 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 會嘗試取巧:運用依附性分析來瞭解哪些檔案必須 、必須分析哪些規則,以及必須執行的動作。適用對象 舉例來說,如果規則會產生目前版本不需要的動作 並不會執行

建立擴充功能

以下兩個連結在您撰寫自己的額外資訊時相當實用。保留 觸手可及

再升級

除了巨集規則之外,您可能還需要撰寫 切面存放區規則