以下是撰寫擴充功能時的常見問題和問題。
為什麼我的檔案無法產生 / 我的操作從未執行?
Bazel 只會執行產生「要求」輸出檔案所需的動作。
如果已為檔案加上標籤,可以直接要求:
bazel build //pkg:myfile.txt
如果檔案位於目標的輸出群組中,您可能需要指定 輸出群組:
bazel build //pkg:mytarget --output_groups=foo
如果您希望系統在每次目標時自動建立檔案 ,請將該指令新增至規則的預設輸出內容 傳回
DefaultInfo
供應器。
詳情請參閱規則頁面。
為什麼我的實作函式未執行?
Bazel 只會分析要求的目標。請 可以在指令列上為目標命名,或是根據 目標。
執行動作或二進位檔時,檔案遺失
確認 1) 檔案已登錄為該動作的輸入資料,或 二進位和 2) 所執行的指令碼或工具使用 正確的路徑
如果是動作,請將輸入內容傳遞至 ctx.actions.*
函式來宣告輸入內容
建立動作使用以下指令取得檔案的正確路徑:
File.path
。
針對二進位檔 (bazel run
或 bazel 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 常值 (
加三引號) 對應到 rule
或 attr.*()
的 doc
參數。需要協助
函式和巨集,請使用三引號的 docstring 常值,
請參閱這裡的說明。
規則實作函式通常不需要自己的 docstring。
在預期位置使用字串常值,可簡化自動化作業 可擷取說明文件您可以使用標準非字串註解 以協助讀取程式碼的讀者