在工作区@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
?
答案 0 :(得分:0)
这是一个错误! // main:开发应该解析为@base // main:自动开发。我已经为此提交了an issue。
作为一种(烦人的)解决方法,您可以在@ child // main中重新定义配置设置。