프로토콜 버퍼 규칙

문제 신고 소스 보기 나이틀리 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

규칙

cc_proto_library

규칙 소스 보기
cc_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

cc_proto_library.proto 파일에서 C++ 코드를 생성합니다.

depsproto_library 규칙을 가리켜야 합니다.

예:


cc_library(
    name = "lib",
    deps = [":foo_cc_proto"],
)

cc_proto_library(
    name = "foo_cc_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

인수

속성
name

이름: 필수

이 타겟의 고유한 이름입니다.

deps

라벨 목록입니다. 기본값은 []입니다.

C++ 코드를 생성할 proto_library 규칙 목록입니다.

java_lite_proto_library

규칙 소스 보기
java_lite_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_lite_proto_library.proto 파일에서 Java 코드를 생성합니다.

depsproto_library 규칙을 가리켜야 합니다.

예:


java_library(
    name = "lib",
    runtime_deps = [":foo"],
)

java_lite_proto_library(
    name = "foo",
    deps = [":bar"],
)

proto_library(
    name = "bar",
)

인수

속성
name

이름: 필수

이 타겟의 고유한 이름입니다.

deps

라벨 목록입니다. 기본값은 []입니다.

Java 코드를 생성할 proto_library 규칙 목록입니다.

java_proto_library

규칙 소스 보기
java_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, licenses, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_proto_library.proto 파일에서 Java 코드를 생성합니다.

depsproto_library 규칙을 가리켜야 합니다.

예:


java_library(
    name = "lib",
    runtime_deps = [":foo_java_proto"],
)

java_proto_library(
    name = "foo_java_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

인수

속성
name

이름: 필수

이 타겟의 고유한 이름입니다.

deps

라벨 목록입니다. 기본값은 []입니다.

Java 코드를 생성할 proto_library 규칙 목록입니다.

proto_library

규칙 소스 보기
proto_library(name, deps, srcs, data, allow_exports, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, exports, features, import_prefix, licenses, package_metadata, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, toolchains, visibility)

proto_library를 사용하여 여러 언어에서 사용할 수 있는 프로토콜 버퍼 라이브러리를 정의합니다. proto_libraryjava_proto_library와 같은 지원되는 규칙의 deps 절에 나열될 수 있습니다.

명령줄에서 컴파일하면 proto_library는 규칙이 src하는 메시지의 설명자 집합인 foo-descriptor-set.proto.bin라는 파일을 만듭니다. 파일은 https://developers.google.com/protocol-buffers/docs/techniques#self-description에 설명된 직렬화된 FileDescriptorSet입니다.

proto_library 규칙에서 직접 언급한 .proto 파일에 관한 정보만 포함합니다. 임시 설명자 세트의 컬렉션은 [ProtoInfo].transitive_descriptor_sets Starlark 제공자를 통해 사용할 수 있습니다. proto_info.bzl의 문서를 참고하세요.

권장 코드 구성:

  • .proto 파일당 하나의 proto_library 규칙
  • foo.proto라는 파일은 동일한 패키지에 있는 foo_proto이라는 규칙에 있습니다.
  • foo_proto라는 이름의 proto_library을 래핑하는 [language]_proto_libraryfoo_[language]_proto라고 해야 하며 동일한 패키지에 있어야 합니다.

인수

속성
name

이름: 필수

이 타겟의 고유한 이름입니다.

deps

라벨 목록입니다. 기본값은 []입니다.

타겟이 종속된 다른 proto_library 규칙의 목록입니다. proto_library는 다른 proto_library 타겟에만 종속될 수 있습니다. 언어별 라이브러리에 종속되지 않을 수 있습니다.
srcs

라벨 목록입니다. 기본값은 []입니다.

타겟을 만들기 위해 처리되는 .proto.protodevel 파일 목록입니다. 일반적으로 비어 있지 않은 목록입니다. srcs가 비어 있을 수 있는 사용 사례 중 하나는 별칭 라이브러리입니다. deps에 하나 이상의 다른 proto_library가 있는 proto_library 규칙입니다. 이 패턴은 영구 이름으로 공개 API를 내보내는 데 사용할 수 있습니다.
allow_exports

라벨: 기본값은 None입니다.

나열된 패키지 중 하나에 없는 lang_proto_library에서 proto 라이브러리가 다시 내보내지거나 사용되지 않도록 하는 선택적 허용 목록입니다.
exports

라벨 목록입니다. 기본값은 []입니다.

프로토 소스에서 'import public'을 통해 참조할 수 있는 proto_library 타겟 목록입니다. 'import public'을 사용하지만 내보내기 속성에 해당 라이브러리를 나열하지 않으면 오류가 발생합니다. 아직 모든 lang_proto_library 구현이 변경되지 않았으므로 deps와 exports 모두에 라이브러리를 나열해야 합니다.
import_prefix

문자열, 기본값은 ""입니다.

이 규칙에서 .proto 파일의 경로에 추가할 접두사입니다.

설정되면 이 규칙의 srcs 속성에 있는 .proto 소스 파일은 리포지토리 관련 경로에 이 속성 값이 추가된 위치에서 액세스할 수 있습니다.

이 접두사가 추가되기 전에 strip_import_prefix 속성의 접두사가 삭제됩니다.

strip_import_prefix

문자열, 기본값은 "/"입니다.

이 규칙에서 .proto 파일의 경로에서 삭제할 접두사입니다.

설정되면 이 규칙의 srcs 속성에 있는 .proto 소스 파일은 이 접두사가 잘린 경로에서 액세스할 수 있습니다.

슬래시로 시작하지 않는 상대 경로인 경우 패키지 상대 경로로 간주됩니다. 절대 경로인 경우 저장소 상대 경로로 이해됩니다.

import_prefix 속성의 접두사는 이 접두사가 삭제된 후에 추가됩니다.

py_proto_library

규칙 소스 보기
py_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
`py_proto_library` 를 사용하여 `.proto` 파일에서 Python 라이브러리를 생성합니다. 규칙은 `proto_library` 규칙 `foo_proto`를 래핑할 때 `py_proto_library` 규칙의 이름을 `foo_py_pb2`로 지정하는 것입니다. `deps` 는 `proto_library` 규칙을 가리켜야 합니다. 예: ```starlark py_library( name = "lib", deps = [":foo_py_pb2"], ) py_proto_library( name = "foo_py_pb2", deps = [":foo_proto"], ) proto_library( name = "foo_proto", srcs = ["foo.proto"], ) ```

인수

속성
name

이름: 필수

이 타겟의 고유한 이름입니다.

deps

라벨 목록입니다. 기본값은 []입니다.

Python 라이브러리를 생성할 `proto_library` 규칙 목록입니다. 일반적으로 관심 있는 프로토 라이브러리라는 하나의 타겟만 있습니다. `ProtoInfo`를 제공하는 모든 타겟일 수 있습니다.

proto_lang_toolchain

규칙 소스 보기
proto_lang_toolchain(name, allowlist_different_package, aspect_hints, blacklisted_protos, command_line, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, mnemonic, output_files, package_metadata, plugin, plugin_format_flag, progress_message, protoc_minimal_do_not_use, restricted_to, runtime, tags, target_compatible_with, testonly, toolchain_type, toolchains, visibility)

Bazel을 사용하는 경우 https://github.com/bazelbuild/rules_proto에서 규칙을 로드하세요.

LANG_proto_library 규칙 (예: java_proto_library)는 프로토 컴파일러를 호출해야 합니다. 일부 LANG_proto_library 규칙에서는 명령줄 플래그를 사용하여 사용할 도구 모음을 지정할 수 있습니다. 문서를 참고하세요.

일반적으로 Java 컴파일러를 조정하려는 경우가 아니면 이러한 규칙을 작성하지 않는 것이 좋습니다.

컴파일러가 없습니다. 프로토 컴파일러는 연결된 proto_library 규칙에서 가져옵니다. Blaze에 명령줄 플래그로 전달됩니다. 여러 기능에서는 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

이름: 필수

이 타겟의 고유한 이름입니다.

allowlist_different_package

라벨: 기본값은 None입니다.

blacklisted_protos

라벨 목록입니다. 기본값은 []입니다.

blacklisted_protossrcs 속성에 있는 파일에 대해서는 코드가 생성되지 않습니다. 이는 any.proto와 같이 이미 프로토 런타임에 연결된 .proto 파일에 사용됩니다.
command_line

문자열, 필수

이 값은 코드를 생성하기 위해 프로토 컴파일러에 전달됩니다. 이 코드 생성기/플러그인과 관련된 부분만 포함합니다 (예: -I 매개변수는 포함하지 않음).
  • $(OUT)은 LANG_proto_library에 따라 다릅니다. 규칙은 이 변수를 해석하는 방법을 정의해야 합니다. 예를 들어 Java의 경우 $(OUT)은 생성할 src-jar 파일 이름으로 대체됩니다.
mnemonic

문자열, 기본값은 "GenProto"입니다.

이 값은 protoc 작업의 니모닉으로 설정됩니다.
output_files

문자열, 기본값은 "legacy"입니다.

command_line$(OUT) 형식을 제어합니다. 단일 파일의 경로 또는 여러 파일의 경우 출력 디렉터리입니다. 가능한 값은 'single', 'multiple'입니다.
plugin

라벨: 기본값은 None입니다.

제공되는 경우 프로토 컴파일러를 호출하는 작업에 제공되며 프로토 컴파일러에 전달됩니다. --plugin=protoc-gen-PLUGIN=<executable>.
plugin_format_flag

문자열, 기본값은 ""입니다.

제공된 경우 이 값은 플러그인을 사용하기 위해 프로토 컴파일러에 전달됩니다. 값에는 플러그인 실행 파일로 대체되는 %s가 하나 포함되어야 합니다. --plugin=protoc-gen-PLUGIN=<executable>.
progress_message

문자열, 기본값은 "Generating proto_library %{label}"입니다.

이 값은 protoc 작업의 진행 메시지로 설정됩니다.
protoc_minimal_do_not_use

라벨: 기본값은 None입니다.

runtime

라벨: 기본값은 None입니다.

생성된 코드가 컴파일되는 언어별 라이브러리입니다. 정확한 동작은 LANG_proto_library에 따라 다릅니다. 예를 들어 Java는 런타임에 대해 컴파일해야 합니다.
toolchain_type

라벨: 기본값은 None입니다.

proto_toolchain

규칙 소스 보기
proto_toolchain(name, aspect_hints, command_line, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, mnemonic, output_files, package_metadata, progress_message, proto_compiler, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

인수

속성
name

이름: 필수

이 타겟의 고유한 이름입니다.

command_line

문자열, 기본값은 "--descriptor_set_out=%s"입니다.

mnemonic

문자열, 기본값은 "GenProtoDescriptorSet"입니다.

output_files

문자열, 기본값은 "single"입니다.

progress_message

문자열, 기본값은 "Generating Descriptor Set proto_library %{label}"입니다.

proto_compiler

라벨: 기본값은 None입니다.