首页 > 解决方案 > 我可以依赖与模式匹配的所有 Bazel 目标,而不单独列出它们吗?

问题描述

我有一个如下所示的目录结构:

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哪个也不起作用。

标签: bazel

解决方案


update您可以从命令行获取具有名称的所有标签:

bazel query "attr(name, '^update$', //...)"

并获取查询的输出并手动编辑您的依赖项。

但不幸的是,您不能将其放入 agenquery rule中(这将生成要依赖的目标列表),因为

不允许查询包含通配符目标规范(例如 //pkg:* 或 //pkg:all)


推荐阅读