【问题标题】:Using bazel macros across repositories with labels在带有标签的存储库中使用 bazel 宏
【发布时间】:2018-08-10 19:57:54
【问题描述】:

我有两个存储库,客户端和库。

在客户端的 WORKSPACE 文件中,客户端将库导入为名为“foo”的 http_archive。

在客户端内部,我想使用引用库中目标的库宏。我的问题是库宏不知道导入为“foo”,所以当宏展开时,找不到目标。

【问题讨论】:

  • 您是否考虑过将库作为库导入,然后在两个地方都有宏引用库?规范命名是 bazel 试图去的地方
  • 您能说得更具体些吗?如果宏引用@Library/foo:bar,我知道它在客户端中是如何工作的,但在库内部它不知道@Library 是什么。

标签: bazel skylark


【解决方案1】:

图书馆/工作空间:
workspace(name = "library") 图书馆/some.bzl:

def my_macro():
  native.java_library(name = "my_macro_lib",
    deps = ["@library//:my_macro_lib_dependnecy"]
  )

库/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 中解决

【讨论】:

  • @razeh 这对你有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2018-11-08
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
相关资源
最近更新 更多