当前位置 : 主页 > 大数据 > 区块链 >

protobuf C编译器的bazel规则

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在使用Bazel和Google的协议缓冲区.我想添加一个Bazel规则,以便我可以从.proto文件生成C API.在GNU make中,我会这样做(简化示例): %.h: %.cc%.cc: %.proto protoc --cpp_out=. $ 如何使用Bazel完成相同的
我正在使用Bazel和Google的协议缓冲区.我想添加一个Bazel规则,以便我可以从.proto文件生成C API.在GNU make中,我会这样做(简化示例):

%.h: %.cc
%.cc: %.proto
    protoc --cpp_out=. $<

如何使用Bazel完成相同的操作(即每当mymessage.proto更改时生成API)?

cc_proto_library的原生支持最近登陆Bazel: http://bazel.build/blog/2017/02/27/protocol-buffers.html.

tl; dr,在设置一次WORKSPACE文件之后,

cc_proto_library(
    name = "person_cc_proto",
    deps = [":person_proto"],
)

proto_library(
    name = "person_proto",
    srcs = ["person.proto"],
    deps = [":address_proto"],
)

...

然后,

$bazel build :person_cc_proto

在https://github.com/cgrushko/proto_library有一个例子.

要点是您定义了一个proto_library以将.proto文件“导入”Bazel,并将cc_proto_library编译为C.默认情况下,协议缓冲区编译器和运行时分别来自@com_google_protobuf //:protoc和@com_google_protobuf_cc //:cc_toolchain.

这种分离的原因是为了启用需要编译为多种语言的大型原型图.

网友评论