从标签和相对偏移计算标签

时间:2017-07-08 16:19:21

标签: bazel

我有一个宏生成两个规则来避免循环问题。对于yaspl_bootstrap_library(name=foo, deps=[":bar"])这样的调用,我想生成以下规则:

yaspl_library(name=foo, deps=[":bar"]) yaspl_srcs(name=foo_srcs, deps=[":bar_srcs"])

因此,我需要一个函数将":bar"转换为":bar_srcs"。虽然明显的字符串连接在此示例中起作用,但在"//lib/foo"需要转换为"//lib/foo:foo_srcs"的情况下会失败。

这似乎是在宏中发生的常见事情,但我似乎找不到任何容易做到的事情。

1 个答案:

答案 0 :(得分:0)

首先,我要指出这种字符串操作不适用于select函数(https://docs.bazel.build/versions/master/be/functions.html#select)。

如果它不是您的问题,您可以继续。此函数可以用.bzl文件编写。我同意这个标签操作功能应该可用。在此期间,您可以尝试此功能:

def explicit_label(label):
  if ":" in label or "//" not in label:
    return label
  return label + ":" + label[label.rfind("/")+1:]


explicit_label(dep) + "_srcs"