通訊協定緩衝區規則

規則

proto_lang_toolchain

proto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, plugin, plugin_format_flag, progress_message, proto_compiler, restricted_to, runtime, tags, target_compatible_with, testonly, visibility)

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

指定 LANG_proto_library 規則的方式 (例如java_proto_library) 應叫用 proto-compiler 部分 LANG_proto_library 規則允許透過指令列標記指定要使用的工具鍊。 請參閱說明文件

通常除非需要 微調 Java 編譯器

沒有編譯器。proto-compiler 來自於我們附加的 proto_library 規則,是 以指令列旗標的形式傳送至 Blaze。 部分功能需要在 proto_library 規則本身叫用 proto-compiler。 強制要求 LANG_proto_library 使用的編譯器與 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

Name; required

此目標的專屬名稱。

blacklisted_protos

List of labels; optional

系統不會為下列 srcs 屬性中的檔案產生程式碼: blacklisted_protos。 這會用於已連結至 proto 執行階段的 .proto 檔案,例如 any.proto
command_line

String; required

這個值會傳遞至 proto-compiler 來產生程式碼。只包含部分 專屬於此程式碼產生器/外掛程式 (例如不要加入 -I 參數)
  • $(OUT) 僅適用於 LANG_proto_library。這類規則應定義 如何解讀這個變數以 Java 為例,$(OUT) 將替換為 要建立的 src-jar 檔案名稱
mnemonic

String; optional; default is "GenProto"

這個值會設為 protoc 動作的記憶字元。
plugin

Label; optional

如有提供,就會提供給呼叫 proto-compiler 的動作, 會傳遞到 proto-compiler: --plugin=protoc-gen-PLUGIN=.
plugin_format_flag

String; optional

如有提供,這個值會傳遞至 proto-compiler 以使用該外掛程式。值必須 包含一個 %s,由外掛程式執行檔取代。 --plugin=protoc-gen-PLUGIN=.
progress_message

String; optional; default is "Generating proto_library %{label}"

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

Label; optional

proto 編譯器可執行檔。 如有提供,這個目標會做為 proto 編譯器產生程式碼。
runtime

Label; optional

產生程式碼編譯依據的語言專屬程式庫。 確切的行為僅適用於 LANG_proto_library。 例如,Java 應根據執行階段編譯。

proto_library

proto_library(name, deps, srcs, data, 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,這是針對 訊息中的 srcs 訊息。檔案是序列化的 FileDescriptorSet, 描述 https://developers.google.com/protocol-buffers/docs/techniques#self-description.

其中只包含以下管理員直接提到的 .proto 檔案相關資訊 proto_library 規則;及傳輸描述元集的集合 [ProtoInfo].transitive_descriptor_sets Starlark 供應商。 請參閱 ProtoInfo.java 中的說明文件。

建議的程式碼整理方式:

  • 每個 .proto 檔案一項 proto_library 規則。
  • 名為 foo.proto 的檔案會放入名為 foo_proto 的規則, 位於同一個套件中
  • 納入名為 proto_library[language]_proto_library 應呼叫 foo_proto foo_[language]_proto,且位於同一個套件中。

引數

屬性
name

Name; required

此目標的專屬名稱。

deps

List of labels; optional

該目標依附的其他 proto_library 規則清單。 proto_library 只能依附於其他項目 proto_library 個目標。 可能沒有依賴特定語言的程式庫。
srcs

List of labels; optional

選取的 .proto.protodevel 檔案清單 就能建立目標這份清單通常並非空白清單。單一用途 其中 srcs 可以是 alias-library。這是 proto_library 規則在 deps 中有一或多個其他 proto_library。 這個模式可用於多種用途,例如以永久名稱的形式匯出公用 API
exports

List of labels; optional

可透過「匯入公開項目」參照的 proto_library 目標清單原型 來源。
import_prefix

String; optional

要為這項規則中 .proto 檔案路徑加上的前置字串。

設定後,這項規則的 srcs 屬性中的 .proto 來源檔案就會是 可透過 存取,就是這個屬性的值在存放區相關路徑前面。

系統會先移除 strip_import_prefix 屬性中的前置字元 前置字元,

strip_import_prefix

String; optional

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

設定後,這項規則的 srcs 屬性中的 .proto 來源檔案就會是 可讓任何人透過這個前置字元遭到截斷。

如果這是相對路徑 (不是以斜線開頭),則採用套件相對路徑 第一項。如果是絕對路徑,會解讀為存放區相關路徑。

緊接在 import_prefix 屬性中的前置字元後,再加上 移除。