从源文件路径派生 Bazel 标签

Derive Bazel label from source file path

给定工作区内源文件的路径,我如何导出 Bazel 用来引用该文件的标签。这似乎取决于存在哪些包。例如,如果我有这个结构:

.
├── BUILD
├── WORKSPACE
└── src
    └── bar
        └── foo.go

那么 src/bar/foo.go 的标签是 //src/bar/foo.go。但是,如果我有这个结构:

.
├── BUILD
├── WORKSPACE
└── src
    ├── BUILD
    └── bar
        ├── BUILD
        └── foo.go

那么同一个文件的标签是//src/bar:foo.go

有没有办法让 Bazel 告诉我标识文件的标签是什么,或者我必须根据 presence/absence 的 BUILD 个文件在不同级别的工作区树?

如果存在 path/to/file.txt 的有效标签,运行 bazel query path/to/file.txt 将 return 绝对标签。

例如对于第一个例子:

$ bazel query src/bar/foo.go
//:src/bar/foo.go

第二个例子:

$ bazel query src/bar/foo.go
//src/bar:foo.go

如果文件未在任何 BUILD 文件的任何规则(filegroupexports_files 等)中引用,则它不会有标签。