在带有标签的存储库中使用 bazel 宏
Using bazel macros across repositories with labels
我有两个存储库,客户端和库。
在客户端的 WORKSPACE 文件中,客户端将库作为 http_archive 导入,名称为 "foo"。
在客户端内部,我想使用在库中引用目标的库宏。我的问题是库宏不知道作为 "foo" 导入的,因此当宏展开时找不到目标。
library/WORKSPACE:
workspace(name = "library")
library/some.bzl:
def my_macro():
native.java_library(name = "my_macro_lib",
deps = ["@library//:my_macro_lib_dependnecy"]
)
library/BUILD.bazel:
java_library(name = "my_macro_lib_dependnecy",
...
)
client/WORKSPACE:
workspace(name = "client")
http_archive(
name = "library",
urls = [...],
strip_prefix = ...,
sha256 = ...,
)
因为两个工作区对库工作区使用相同的名称 (name = "library"
),并且因为宏在其依赖项中引用工作区名称 (@library//:my_macro_lib_dependnecy
),所以这是有效的。
请注意,这可行,但有一些怪癖,将在 0.17.0
中解决
我有两个存储库,客户端和库。
在客户端的 WORKSPACE 文件中,客户端将库作为 http_archive 导入,名称为 "foo"。
在客户端内部,我想使用在库中引用目标的库宏。我的问题是库宏不知道作为 "foo" 导入的,因此当宏展开时找不到目标。
library/WORKSPACE:
workspace(name = "library")
library/some.bzl:
def my_macro():
native.java_library(name = "my_macro_lib",
deps = ["@library//:my_macro_lib_dependnecy"]
)
library/BUILD.bazel:
java_library(name = "my_macro_lib_dependnecy",
...
)
client/WORKSPACE:
workspace(name = "client")
http_archive(
name = "library",
urls = [...],
strip_prefix = ...,
sha256 = ...,
)
因为两个工作区对库工作区使用相同的名称 (name = "library"
),并且因为宏在其依赖项中引用工作区名称 (@library//:my_macro_lib_dependnecy
),所以这是有效的。
请注意,这可行,但有一些怪癖,将在 0.17.0