根据标签和相对偏移量计算标签



我有一个宏,它正在生成两个规则以避免循环问题。对于像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"的情况下失败。

这似乎是宏中经常发生的事情,但我似乎找不到任何可以轻松做到这一点的东西。

首先,我要指出,这种字符串操作不适用于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"

最新更新