常見問題

回報問題 查看原始碼 。 。 。 。 夜間7.3 。 。 7.2 。 。 7.1 。 。 7.0 。 。 6.5

以下是撰寫擴充功能時的常見問題和問題。

為什麼我的檔案無法產生 / 我的操作從未執行?

Bazel 只會執行產生「要求」輸出檔案所需的動作。

  • 如果已為檔案加上標籤,可以直接要求: bazel build //pkg:myfile.txt

  • 如果檔案位於目標的輸出群組中,您可能需要指定 輸出群組: bazel build //pkg:mytarget --output_groups=foo

  • 如果您希望系統在每次目標時自動建立檔案 ,請將該指令新增至規則的預設輸出內容 傳回 DefaultInfo 供應器。

詳情請參閱規則頁面

為什麼我的實作函式未執行?

Bazel 只會分析要求的目標。請 可以在指令列上為目標命名,或是根據 目標。

執行動作或二進位檔時,檔案遺失

確認 1) 檔案已登錄為該動作的輸入資料,或 二進位和 2) 所執行的指令碼或工具使用 正確的路徑

如果是動作,請將輸入內容傳遞至 ctx.actions.* 函式來宣告輸入內容 建立動作使用以下指令取得檔案的正確路徑: File.path

針對二進位檔 (bazel runbazel test 執行的可執行檔輸出內容) 指令),將輸入值加入 runfiles。不要使用 path 欄位,而是改用 File.short_path 是檔案相對於 執行二進位檔的執行檔案目錄。

如何控管 bazel build //pkg:mytarget 建立的檔案?

使用 DefaultInfo 供應商: 設定預設輸出內容

如何在建構過程中執行程式或檔案 I/O?

工具可宣告為目標,就像建構作業的其他部分一樣 協助建構其他目標。如何建立動作 執行工具,請使用 ctx.actions.run,並傳入 做為 executable 參數

在載入和分析階段中,工具「無法」執行或無法執行 檔案 I/O這表示工具和檔案內容 (BUILD 內容除外) 和 .bzl 檔案),也不會影響目標和動作圖的建立方式。

如果在執行階段之前和期間需要存取相同的結構化資料,該怎麼辦?

您可以使用 .bzl 檔案格式設定結構化資料。只要 load() 檔案,即可: 就能在載入和分析階段存取資源可做為輸入內容傳遞 對執行階段需要該檔案的動作和執行檔執行檔案。

如何記錄 Starlark 程式碼?

對於規則和規則屬性,您可以傳送 docstring 常值 ( 加三引號) 對應到 ruleattr.*()doc 參數。需要協助 函式和巨集,請使用三引號的 docstring 常值, 請參閱這裡的說明。 規則實作函式通常不需要自己的 docstring。

在預期位置使用字串常值,可簡化自動化作業 可擷取說明文件您可以使用標準非字串註解 以協助讀取程式碼的讀者