2017-07-08 68 views
1

我有一个生成两条规则以避免循环问题的宏。对于像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

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