在带有标签的存储库中使用bazel宏

时间:2018-08-10 19:57:54

标签: bazel skylark

我有两个存储库,即Client和Library。

在客户端的WORKSPACE文件内部,客户端将Library作为http_archive导入,名称为“ foo”。

在客户端内部,我想使用引用库内部目标的库宏。我的问题是Library宏不知道是作为“ foo”导入的,因此在扩展宏时找不到目标。

1 个答案:

答案 0 :(得分:1)

图书馆/工作空间:
workspace(name = "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",
  ...
)

客户端/工作空间:

workspace(name = "client")
http_archive(
             name = "library",
             urls = [...],
             strip_prefix = ...,
             sha256 = ...,
)

因为两个工作区的库工作区(name = "library")使用相同的名称,并且因为宏在其依赖项(@library//:my_macro_lib_dependnecy)中引用了工作区名称,所以它可以正常工作。 请注意,此方法有效,但有一些古怪之处,将在0.17.0中解决