Protocol buffers 在Bazel构建中获取工作区根

Protocol buffers 在Bazel构建中获取工作区根,protocol-buffers,bazel,Protocol Buffers,Bazel,我正在使用为我的helloworld.proto文件构建Python语言绑定。我的helloworld.proto导入 我的构建文件 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/prot

我正在使用为我的
helloworld.proto
文件构建Python语言绑定。我的
helloworld.proto
导入

我的构建文件

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"]
)
wrappers.proto
文件位于目录中

/usr/local/home/username/myproject/include
Bazel规则
py_proto_compile
由和定义<代码>导入定义为:

  • 名称:
    导入
  • 类型:字符串列表`
  • 说明:作为-I参数传递给protoc工具的可选路径
  • 默认值:
    []
我的构建规则有效,但是我已经用以下代码硬编码了
wrappers.proto
的位置:

imports=[“/usr/local/home/username/myproject/include”]

Bazel似乎没有任何引用我的工作区根的文件。理想情况下,我想做这样的事情:


imports=[“$WORKSPACE\u ROOT”/include“]
新更新:

还有一种更为精细的方法。请查看。看看上面的文字:

#获取对用户项目根目录的引用
project\u dir=ctx.path(项目中的ctx.attr.file)。dirname

旧答案:

您可以使用
\uuuu workspace\u dir\uuuu
获取当前工作目录的路径(即包含
workspace
文件的目录)


来源:

我发现旧答案更好,因为它不需要自定义规则至少包含一个指向调用工作区中文件的属性。
/usr/local/home/username/myproject/include