如何将使用不同配置构建的Bazel构建构件聚合在一起?

如何将使用不同配置构建的Bazel构建构件聚合在一起?,bazel,Bazel,我使用Bazel使用许多不同的配置构建二进制文件,然后将这些二进制文件压缩在一起 最初,我尝试编写一个genrule来实现这一点,方法是将每个二进制规则添加到src中,然后通过引用$location:binary-target对它们运行zip 这样做的问题是genrule本身只能使用一个特定配置构建,这意味着多个配置:一些使用不同配置的二进制目标src无法成功构建在一起 是否有一种方法可以在与请求所述工件的规则不同的配置下引用规则的构建工件?这可能有点复杂,具体取决于您需要做什么 这里需要的是一

我使用Bazel使用许多不同的配置构建二进制文件,然后将这些二进制文件压缩在一起

最初,我尝试编写一个genrule来实现这一点,方法是将每个二进制规则添加到src中,然后通过引用$location:binary-target对它们运行zip

这样做的问题是genrule本身只能使用一个特定配置构建,这意味着多个配置:一些使用不同配置的二进制目标src无法成功构建在一起


是否有一种方法可以在与请求所述工件的规则不同的配置下引用规则的构建工件?

这可能有点复杂,具体取决于您需要做什么

这里需要的是一个Starlark规则,它有一个带有拆分配置转换的属性。通过这种转换,可以在其他一些配置中评估该属性中的目标。所以你可以

some_rule(
  name = "foo",
  deps = [":dep1", ":dep2"]
)
其中,deps属性有一个从配置a到配置foo的转换,其中foo被评估为b和c,foo获得两个版本的dep1,一个来自配置b,另一个来自c,类似地,还有两个版本的dep2。foo然后可以使用它们做它需要做的事情,比如将它们放在zip文件中

这里解释了其中的大部分内容:

特别是:

这里有一个线程,其中有一个示例,说明如何执行大部分操作:


该线程提到了如何访问每个dep的不同版本的配置信息的缺失部分,这可能是您需要的,具体取决于您需要做什么。这项工作正在积极进行中,可能会在3.0.0之后的下一个bazel版本中提供,特别是当这项工作可能会涉及一些内容时,具体取决于您需要做什么

这里需要的是一个Starlark规则,它有一个带有拆分配置转换的属性。通过这种转换,可以在其他一些配置中评估该属性中的目标。所以你可以

some_rule(
  name = "foo",
  deps = [":dep1", ":dep2"]
)
其中,deps属性有一个从配置a到配置foo的转换,其中foo被评估为b和c,foo获得两个版本的dep1,一个来自配置b,另一个来自c,类似地,还有两个版本的dep2。foo然后可以使用它们做它需要做的事情,比如将它们放在zip文件中

这里解释了其中的大部分内容:

特别是:

这里有一个线程,其中有一个示例,说明如何执行大部分操作:

该线程提到了如何访问每个dep的不同版本的配置信息的缺失部分,这可能是您需要的,具体取决于您需要做什么。这项工作正在积极进行中,可能会在3.0.0之后的下一个bazel版本中提供,特别是在