ワークスペース@base
で、main/macros.bzl に次のような「マクロ」があるとします。
def if_development(if_true, if_false = []):
return select({
"//main:development": if_true,
"//conditions:default": if_false
})
そして、main/BUILD では:
package(default_visibility = ["//visibility:public"])
config_setting(
name = "development",
values = { "define": "MODE=development" },
)
ここで、このマクロを別のワークスペースからロードできるようにしたいと考えています@child
。たとえば、次のようになります。
load("@base//main:macros.bzl", "if_development")
//main:development
その後、ワークスペースに対して解決されず、@base
ワークスペースに対して解決されるため、失敗し@child
ます。
ERROR: /path/to/child/src/BUILD:3:1: no such package 'main': BUILD file not found on package path and referenced by '//src:bar'.
ただし、次のように完全に修飾すると、次のようになります。
def if_development(if_true, if_false = []):
return select({
"@base//main:development": if_true,
"//conditions:default": if_false
})
その後、 で動作し@child
ますが、定義しているワークスペース内で使用すると失敗し@base
ます@main
。
ERROR: /path/to/base/src/BUILD:3:1: no such package '@base//main': error loading package 'external': The repository named 'base' could not be resolved and referenced by '//src:bar'.
@base//main:development
定義するワークスペースの内外で機能する方法で、マクロ内でを参照するにはどうすればよいですか?