gpt4 book ai didi

bazel - 将子包中的文件组聚合到 bazel 中的大文件组中?

转载 作者:行者123 更新时间:2023-12-04 04:30:01 30 4
gpt4 key购买 nike

我有一个父目录 foo , 和子目录 bar , baz , 和 qux .所有四个目录都包含一个 bazel BUILD 文件并定义了 filegroup包含子目录中所有文件的规则(加上各种其他规则)。问题在于 filegroup在父目录 foo不能使用 glob 来确保包含所有文件(因为 glob 不跨越包边界)。相反,我目前手动将所有 child 的规则列为 srcsfoo ,并且这个手动列表容易出错,因为当 foo 的另一个子项时加了,作者一定要记得加到srcsfoo .我试图通过添加 genquery 来解决这个问题。规则在 foo (我想我可以在构建时以某种方式从这个程序中提取一个 srcs 列表),但是在 expression 中不允许递归模式。的 genquery规则,所以这是不成功的。

创建这样一个文件组最不容易出错的方法是什么?列出 srcs 是否有比我目前手动构建它更好的方法? ?

最佳答案

src文件组的名称是 list of labels .

因此,你可以(并且应该)做

filegroup(
name = "foo_supergroup",
srcs = [
"//foo/bar:smallergroup",
"//foo/baz:smallergroup",
"//foo/qux:smallergroup",
],
)

编辑 :然后您可以添加预提交检查,以确保这些依赖项与子组相同。

为此,我建议您引入一个标签“是的”: foo/BUILD包含
filegroup(
name = "smallergroup",
srcs = glob(["*.txt"]),
tags = ["yeah"],
)

多亏了这一点:
blaze query 'attr("tags", ".*yeah.*", deps(//foo/...))'
//foo/bar:smallergroup
//foo/baz:smallergroup
//foo/qux:smallergroup

然后很容易与超群的来源进行比较:
blaze query 'deps(//foo:foo_supergroup, 1)'
//foo:foo_supergroup
//foo/bar:smallergroup
//foo/baz:smallergroup
//foo/qux:smallergroup

事实上,您不需要特定的预提交。您可以使用 sh_test (使用命令 diff )比较这两个使用 gen_query 进行的火焰查询的输出

关于bazel - 将子包中的文件组聚合到 bazel 中的大文件组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53017976/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com