如何在不同的子项目中使用相同的文件组定义

  • 本文关键字:文件 定义 子项目 bazel
  • 更新时间 :
  • 英文 :


我需要为一些子项目声明特定的资源,我正在按照以下方式进行

filegroup(
name = "some_resources",
visibility = ["//:app"],
srcs = glob([
"src/my/resources/**/*.resources",
]),
)

然而,在任何子项目中,可以找到资源的路径都是相同的。我的问题是 - 在这种特殊情况下,最小化代码重复的最巴泽利(bazelish?(方法是什么?

基本上我想要类似的东西 expose_some_resources(( 在相关子项目中。

然后使此资源对每个应用可见。

可以将文件组放入.bzl文件中的宏中,并在相关子项目中加载和运行该宏。

所以像这样:

workspace/resources.bzl

def expose_some_resources():
native.filegroup(
name = "some_resources",
visibility = ["//:app"],
srcs = native.glob([
"src/my/resources/**/*.resources",
]),
)

workspace/subproject/BUILD

load("//:resources.bzl", "expose_some_resources")
expose_some_resources()

您还可以考虑向宏添加一些错误检查,例如使用 native.existing_rule 检查每个包是否仅调用一次宏,或者检查 glob 是否返回 1 个或多个文件。

最新更新