首页 > 解决方案 > 如何使用 bazel 查询确定目标的绝对路径?

问题描述

问题

有什么方法可以使用bazel queryaspects确定 bazel 在包裹路径上的哪个位置拾取包裹?类似于which命令的东西。

文档建议使用--show_package_location. 但是,已弃用且不再受支持,请参阅#5592。此外,我尝试使用它并没有发现太多有用的信息。我已经尝试bazel query //some/target/... --output label_kind --show_package_location过以及其他排列,bazel build它不会添加与控制台输出不同的输出。

动机

我的包路径上有两个不同的目录用于获取、查询和构建。

--package_path=%workspace%:%workspace%/__fuse__

此配置支持用户对我们的大型存储库执行稀疏签出的工作流程,同时仍然能够构建尚未在本地签出的代码。在构建目标时,Bazel 检查本地签出版本的包,如果不存在,它会搜索只读熔断器安装。

有时用户不清楚从哪里提取包裹,即它是本地签出的版本还是来自 fuse 的版本。当他们删除或移动 Bazel 包时,这会成为问题,并且 Bazel 会在保险丝支架上获取版本。

如果我可以将它们指向一个命令,该命令将每个包映射到它被拾取的位置,那就太好了。例如,如果我在...上运行命令

//some/package/foo --> package_path/some/package/foo
//some/package/bar --> other_package_path/some/package/bar 

标签: bazel

解决方案


我在 bazel 查询文档中完全错过了这一点。

使用 bazel 查询,我只需要添加--output location,因此只要我进行如下查询:

bazel query //some/package/... --output location

然后bazel查询将输出

/absolute/path/some/package/BUILD:lineno:colno target_kind label

对于每个目标//some/package/...


推荐阅读