【问题标题】:How to make bazel label absolute?如何使bazel标签绝对化?
【发布时间】:2021-06-16 17:06:07
【问题描述】:

Bazel genquery 文档说:

与 BUILD 文件中的命令行和其他地方相比,这里的标签是相对于工作区的根目录进行解析的。例如,文件 a/BUILD 中此属性中的标签 :b 将引用目标 //:b。

这意味着,在pkg 包中我必须写//pkg:b 而不是b:b。但是,如果将 genquery 包装在宏中,这会导致用户混淆:用户必须了解实现才能了解附加要求,例如:

my_cc_binary(
  name = "app",
  deps = ["foo", ":bar", "//baz:qux"],
)

如果my_cc_binary 包装了一个在deps 上运行的genquery(除了cc_binary),标签的语义就会改变。如何使指定的相对标签在宏中成为绝对标签?

【问题讨论】:

    标签: bazel


    【解决方案1】:

    使用package_namerepository_name

    def absolute_label(label):
        if label.startswith('@') or label.startswith('/'):
            return label
        if label.startswith(':'):
            return '@' + native.repository_name() + '//' + native.package_name() + label
        return '@' + native.repository_name() + '//' + native.package_name() + ':' + label
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多