我有一个宏生成两个规则来避免循环问题。对于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"
的情况下会失败。
这似乎是在宏中发生的常见事情,但我似乎找不到任何容易做到的事情。
答案 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"