Jac*_*ack 4 protocol-buffers bazel
我正在使用rules_protobuf为我的helloworld.proto
文件构建 Python 语言绑定。我的helloworld.proto
进口wrappers.proto。
syntax = "proto3";
package main;
import "google/protobuf/wrappers.proto";
Run Code Online (Sandbox Code Playgroud)
我的构建文件
load("@org_pubref_rules_protobuf//python:rules.bzl", "py_proto_compile")
# Wrapper around proto_compile.
# https://github.com/pubref/rules_protobuf/blob/master/protobuf/internal/proto_compile.bzl
py_proto_compile(
name = "py",
with_grpc = True,
protos = ["helloworld.proto"],
imports = ["/usr/local/home/username/myproject/include"]
)
Run Code Online (Sandbox Code Playgroud)
该wrappers.proto
文件位于目录中
/usr/local/home/username/myproject/include
Run Code Online (Sandbox Code Playgroud)
Bazel 规则py_proto_compile
由rules_protobuf定义并记录在 README.md 中。imports
定义为:
imports
[]
我的 BUILD 规则有效,但是我已经硬编码了wrappers.proto
with的位置:
imports = ["/usr/local/home/username/myproject/include"]
Bazel 似乎没有任何引用我的 WORKSPACE 根的预定义 Make 变量。理想情况下,我想做这样的事情:
imports = ["$WORKSPACE_ROOT"/include"]
新更新:
还有一种更精细的方法。看看这个。看看它说的几行:
# Grab a reference to the root of the users project
project_dir = ctx.path(ctx.attr.file_in_project).dirname
旧答案:
您可以使用__workspace_dir__
获取当前工作目录(即包含WORKSPACE
文件的目录)的路径。
来源:https : //github.com/tensorflow/serving/blob/4d0a571ff9c15b937f58d3d5e97a5310b5decf2b/tensorflow_serving/workspace.bzl