2017-07-08 69 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"