在 Bazel BUILD 中获取 WORKSPACE 根

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_compilerules_protobuf定义并记录在 README.md 中imports定义为:

  • 姓名: imports
  • 类型: string_list`
  • 描述:作为 -I 参数传递给 protoc 工具的可选路径。
  • 默认: []

我的 BUILD 规则有效,但是我已经硬编码了wrappers.protowith的位置:

imports = ["/usr/local/home/username/myproject/include"]

Bazel 似乎没有任何引用我的 WORKSPACE 根的预定义 Make 变量。理想情况下,我想做这样的事情:

imports = ["$WORKSPACE_ROOT"/include"]

Ani*_*sto 6

新更新:

还有一种更精细的方法。看看这个。看看它说的几行:

# 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