在Bazel BUILD中获取WORKSPACE root

时间:2017-10-05 12:06:23

标签: protocol-buffers bazel

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

syntax = "proto3";

package main;

import "google/protobuf/wrappers.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_compilerules_protobufdocumented in the README.md定义。 imports定义为:

  • 姓名: imports
  • 输入: string_list`
  • 说明:可选路径作为-I参数传递给protoc工具。
  • 默认: []

我的构建规则有效,但我已将wrappers.proto的位置硬编码为:

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

Bazel似乎没有任何引用我的WORKSPACE根目录的predefined Make variables。理想情况下,我想做这样的事情:

imports = ["$WORKSPACE_ROOT"/include"]

1 个答案:

答案 0 :(得分:1)

NEW UPDATE:

还有一种更精细的方法。检查this。看看它所说的行:

# Grab a reference to the root of the users project project_dir = ctx.path(ctx.attr.file_in_project).dirname

OLD ANSWER:

您可以使用__workspace_dir__获取当前工作目录的路径(包含WORKSPACE文件的目录)。

来源:https://github.com/tensorflow/serving/blob/4d0a571ff9c15b937f58d3d5e97a5310b5decf2b/tensorflow_serving/workspace.bzl