通訊協定緩衝區規則

回報問題 查看原始碼 Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

規則

proto_lang_toolchain

查看規則來源
proto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, output_files, plugin, plugin_format_flag, progress_message, proto_compiler, restricted_to, runtime, tags, target_compatible_with, testonly, visibility)

如果使用 Bazel,請從 https://github.com/bazelbuild/rules_proto 載入規則。

指定 LANG_proto_library 規則 (例如java_proto_library) 應叫用 Proto 編譯器。部分 LANG_proto_library 規則可讓您使用指令列標記指定要使用的工具鍊;請參閱相關說明文件。

除非您想調整 Java 編譯器,否則通常不應編寫這類規則。

沒有編譯器。系統會從我們附加的 proto_library 規則取得 proto 編譯器。會以指令列標記的形式傳遞給 Blaze。部分功能需要在 proto_library 規則本身上叫用 proto 編譯器。強制執行 LANG_proto_library 使用的編譯器與 proto_library 使用的編譯器相同,這麼做很有幫助。

範例

簡單的範例如下:

proto_lang_toolchain(
    name = "javalite_toolchain",
    command_line = "--javalite_out=shared,immutable:$(OUT)",
    plugin = ":javalite_plugin",
    runtime = ":protobuf_lite",
)

引數

屬性
name

名稱;必填

這個目標的專屬名稱。

blacklisted_protos

標籤清單;預設為 []

系統不會為 blacklisted_protossrcs 屬性中所列的檔案產生程式碼。這項功能適用於已連結至 proto 執行階段的 .proto 檔案,例如 any.proto
command_line

字串;必填

這個值會傳遞至 Proto 編譯器,以產生程式碼。只包含此程式碼產生器/外掛程式專屬的部分 (例如,請勿加入 -I 參數)
  • $(OUT) 是 LANG_proto_library 專屬,規則應定義解讀這個變數的方式。舉例來說,如果是 Java,系統會將 $(OUT) 替換為要建立的 src-jar 檔案名稱。
mnemonic

字串;預設為 "GenProto"

這個值會設為 protoc 動作的助憶法。
output_files

字串;預設為 "legacy"

控管 command_line 中的 $(OUT) 格式設定方式,可透過單一檔案的路徑或多個檔案的輸出目錄。可能的值為「single」和「multiple」。
plugin

標籤;預設為 None

如果提供,則會提供給呼叫 Proto 編譯器的動作,並傳遞至 Proto 編譯器: --plugin=protoc-gen-PLUGIN=<executable>.
plugin_format_flag

字串;預設為 ""

如果提供此值,系統會將其傳遞至 proto 編譯器,以便使用外掛程式。這個值必須包含單一 %s,並由外掛程式可執行檔取代。--plugin=protoc-gen-PLUGIN=<executable>.
progress_message

字串;預設為 "Generating proto_library %{label}"

這個值會設為 protoc 動作的進度訊息。
proto_compiler

標籤;預設為 None

可執行的 Proto 編譯器。如果提供,這個目標會用作 Proto 編譯器來產生程式碼。
runtime

標籤;預設為 None

產生的程式碼會針對此語言專屬程式庫進行編譯。確切行為取決於 LANG_proto_library。舉例來說,Java 應針對執行階段進行編譯。

proto_library

查看規則來源
proto_library(name, deps, srcs, data, allow_exports, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, import_prefix, licenses, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, visibility)

已淘汰,請改用 https://github.com/bazelbuild/rules_proto

使用 proto_library 定義可用於多種語言的通訊協定緩衝區程式庫。proto_library 可能會列在支援規則的 deps 子句中,例如 java_proto_library

在指令列上編譯時,proto_library 會建立名為 foo-descriptor-set.proto.bin 的檔案,這是規則 src 訊息的描述元組合。這個檔案是已序列化的 FileDescriptorSet,相關說明請參閱 https://developers.google.com/protocol-buffers/docs/techniques#self-description

這個集合只包含 proto_library 規則直接提及的 .proto 檔案資訊;您可以透過 [ProtoInfo].transitive_descriptor_sets Starlark 供應器取得轉換描述元集合。請參閱 ProtoInfo.java 中的說明文件。

建議的程式碼架構:

  • 每個 .proto 檔案只能有一個 proto_library 規則。
  • 名稱為 foo.proto 的檔案會位於名稱為 foo_proto 的規則中,且位於同一個套件中。
  • 包裝名為 foo_protoproto_library[language]_proto_library 應稱為 foo_[language]_proto,並位於相同套件中。

引數

屬性
name

名稱;必填

這個目標的專屬名稱。

deps

標籤清單;預設為 []

目標依附的其他 proto_library 規則清單。proto_library 只能依附其他 proto_library 目標。可能不會依附語言專屬程式庫。
srcs

標籤清單;預設為 []

系統在建立目標時,會處理的 .proto.protodevel 檔案清單。這通常是不會為空的清單。srcs 可為空白的一個用途是別名程式庫。這是一個 proto_library 規則,在 deps 中有一或多個其他 proto_library。例如,您可以使用這個模式,以持久名稱匯出公開 API。
allow_exports

標籤;預設為 None

這個選用許可清單可防止 Proto 程式庫重新匯出,或用於未列在其中的包裝程式 lang_proto_library。
exports

標籤清單;預設為 []

在 proto 來源中,可透過「import public」參照的 proto_library 目標清單。
import_prefix

字串;預設為 ""

要在這個規則中新增至 .proto 檔案路徑的前置字串。

設定後,這個規則的 srcs 屬性中包含的 .proto 來源檔案,可透過該屬性值前置於其相對於存放區的路徑來存取。

系統會先移除 strip_import_prefix 屬性中的前置字串,再新增這個前置字串。

strip_import_prefix

字串;預設為 ""

要從此規則中 .proto 檔案路徑中移除的前置字串。

設定後,您就可以在這個規則的 srcs 屬性中,透過含有此前置字串的路徑存取 .proto 來源檔案。

如果是相對路徑 (開頭不是斜線),則會視為相對於套件的路徑。如果是絕對路徑,系統會將其視為相對於存放區的路徑。

這個前置字元會在移除後,新增至 import_prefix 屬性。