我正在使用Bazel和Google的协议缓冲区.我想添加一个Bazel规则,以便我可以从.proto文件生成C API.在GNU make中,我会这样做(简化示例): %.h: %.cc%.cc: %.proto protoc --cpp_out=. $ 如何使用Bazel完成相同的
%.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.
这种分离的原因是为了启用需要编译为多种语言的大型原型图.