【问题标题】:Derive Bazel label from source file path从源文件路径派生 Bazel 标签
【发布时间】:2018-07-03 11:32:14
【问题描述】:

给定工作区中源文件的路径,我如何导出 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 告诉我标识文件的标签是什么,或者我必须根据工作区树的各个级别上 BUILD 文件的存在/不存在来推导出它?

【问题讨论】:

    标签: bazel


    【解决方案1】:

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

    例如第一个例子:

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

    第二个例子:

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

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

    【讨论】:

    • 感谢您并澄清了我的问题中的不准确之处? 虽然我可以看到这通常会起作用,但它确实感觉有点笨拙,而且有点脆弱。有没有办法让 Bazel 告诉你哪个标签代表给定文件,或者静态派生它?
    • 当然,bazel query 是答案 :-) 更新了我的答案。
    • 太棒了?我有点尴尬我没想到这个,因为它很简单。非常感谢。
    • @Jin 有没有办法在一个命令中识别所有将文件作为 src 的目标,而不是在 docs 中建议的两个 bazel query 命令
    • @petros-eskinder Kinda,使用let var = expr in ...。见github.com/bazelbuild/bazel/issues/5584
    猜你喜欢
    • 2011-10-02
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多