如何将Bazel文件路径拆分为外部依赖目录和相对路径?

时间:2017-09-03 20:57:16

标签: bazel

我正在尝试使用proto编译器的skylark中的自定义规则。由于其工作方式的复杂性,我需要将路径拆分为外部依赖项的目录和相对于该目录的路径部分。

例1: File:[/private/var/tmp/_bazel_endobson/c56b77af296477cd0f319aa9d4ce1d19[source]]external/googleapis/google/devtools/build/v1/build_status.proto

我想要路径: /private/var/tmp/_bazel_endobson/c56b77af296477cd0f319aa9d4ce1d19/external/googleapis/ google/devtools/build/v1/build_status.proto

例2: File:[[/private/var/tmp/_bazel_endobson/c56b77af296477cd0f319aa9d4ce1d19/execroot/bes_example]bazel-out/darwin_x86_64-fastbuild/genfiles]external/com_google_protobuf/google/protobuf/any.proto

我想要路径: /private/var/tmp/_bazel_endobson/c56b77af296477cd0f319aa9d4ce1d19/execroot/bes_example/bazel-out/darwin_x86_64-fastbuild/genfiles/external/com_google_protobuf google/protobuf/any.proto

问题在于,bazel允许访问路径的根和根相对部分,但不会深入了解路径是否具有“外部/”部分。协议缓冲区编译器需要这个,因为它需要从用户的角度知道与根目录对应的目录,以便它可以使用来自源的相对路径。

是否有一种原则性的方法可以检测到这一点,而不是狡猾地查看路径,看看它是否有“外部”?

1 个答案:

答案 0 :(得分:0)

我担心我不能在这里给你一个非常好的答案:(最后,我们要删除"外部"路径段,但它没有发生然而。目前的规则是你有源文物,但你没有它用于生成的工件。

因此,我所做的正是你的建议 - 检查第一个路段是"外部"。