我有一个看起来像这样的目录结构:
some-root/
└── my-stuff/
├── BUILD
├── foo/
│ └── BUILD
├── bar/
│ └── BUILD
└── baz/
└── BUILD
我想要一个像
//some-root/my-stuff:update
这样的目标运行所有 //some-root/my-stuff/foo:update
, //some-root/my-stuff/bar:update
, //some-root/my-stuff/baz:update
.我可以通过将每个目标列为依赖项来做到这一点。但是,如果我有很多这样的目录并且我希望能够添加更多,这将变得很痛苦(添加一堆子目录很容易而错过向父
BUILD
文件添加一个)。有没有办法做通配符标签或以其他方式从文件路径中发现标签?我可以做
bazel test //some-root/my-stuff/...
在路径下运行所有测试,但我似乎无法在 BUILD
中使用该模式文件,我想要的更像是 bazel run //some-root/my-stuff/...:update
这也不起作用。
最佳答案
您可以获得名称为 update
的所有标签从命令行:
bazel query "attr(name, '^update$', //...)"
并获取查询的输出并手动编辑您的依赖项。
但不幸的是你不能把它变成
genquery rule
(这将生成要依赖的目标列表),因为queries containing wildcard target specifications (e.g. //pkg:* or //pkg:all) are not allowed
关于bazel - 我可以依赖匹配模式的所有 Bazel 目标,而不单独列出它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61987996/