如何使用bazel query确定目标的绝对路径?

5

问题

有没有办法使用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挂载中搜索。

有时候,用户不清楚软件包来自哪里,即是否是本地检出版本还是从Fuse服务器上获取的。当用户删除或移动Bazel软件包时,这会导致问题。

如果我可以指向一个命令来映射每个软件包的来源就好了。例如,如果我在...上运行该命令

//some/package/foo --> package_path/some/package/foo
//some/package/bar --> other_package_path/some/package/bar 
1个回答

8

我在bazel查询文档中完全忽略了这个内容。

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

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

然后bazel查询将输出以下内容:
/absolute/path/some/package/BUILD:lineno:colno target_kind label

对于每个目标,遍历//some/package/...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接