額外資訊總覽

回報問題 查看原始碼 夜間 7.4 ,直接在 Google Cloud 控制台實際操作。 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

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

巨集和規則

巨集是一種可將規則例項化的函式。非常有用 有 BUILD 檔案重複或過於複雜,您可以重複使用這個檔案 部分程式碼。只要讀取 BUILD 檔案,系統就會評估函式。評估 BUILD 檔案後,Bazel 幾乎沒有關於巨集的資訊:如果巨集產生 genrule,Bazel 的行為就會像是您編寫 genrule 一樣。因此,bazel query 只會列出產生的 genrule

規則比巨集功能更強大。可以存取 Bazel 而且完全掌控所有內部運作狀況舉例來說 或其他規則的資訊

如要重複使用簡單的邏輯,請從巨集開始。如果巨集變得複雜,通常建議將其設為規則。支援新語言 通常是透過規則執行規則適用於進階使用者 使用者也無需撰寫對話方塊則只會載入並呼叫 不過,編寫這類演算法並不容易 因為我們無法寫出所有可能的規則

評估模型

建構作業包含三個階段

  • 載入階段:首先,請載入並評估所有擴充功能和BUILD 建構所需的檔案只執行 BUILD 檔案 將規則例項化 (每次呼叫規則時,系統都會在圖表中加入規則)。 這就是評估巨集的地方。

  • 分析階段:系統會執行規則的程式碼 (其 implementation 函式),並將動作例項化。動作會說明如何從一組輸入內容產生一組輸出內容,例如「在 hello.c 上執行 gcc 並取得 hello.o」。您必須明確列出將產生哪些檔案 實際執行指令換句話說,分析階段會採用載入階段產生的圖表,並產生動作圖表。

  • 執行階段:當需要至少一個動作的輸出內容時,系統就會執行該動作。如果檔案遺失或指令無法產生一個輸出內容 建構失敗這個階段也會執行測試。

Bazel 會使用平行處理功能讀取、剖析及評估 .bzl 檔案和 BUILD 檔案。每個建構作業最多讀取檔案一次,評估結果為 快取資料。系統只會評估檔案所有依附元件 (load()) 陳述式) 所解決的問題。根據設計,載入 .bzl 檔案不會有明顯的副作用,只會定義值和函式。

Bazel 會嘗試取巧:運用依附性分析來瞭解哪些檔案必須 、必須分析哪些規則,以及必須執行的動作。適用對象 舉例來說,如果規則會產生目前版本不需要的動作 並不會執行

建立擴充功能

編寫自己的擴充功能時,下方的兩個連結會非常實用。請將裝置放在手可及的範圍內:

再升級

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