是否有Bazel命令行来确定一个或多个给定标签的输出的绝对路径?

是否有Bazel命令行来确定一个或多个给定标签的输出的绝对路径?,bazel,Bazel,我知道有bazel info bazel bin,但这只是给出了输出路径前缀。我希望通过一些奇特的cquery或aquery来获得输出的完整路径。据我所知,没有一种简单的方法可以实现这一点(请参见下面的相关讨论),但如果您的目标是可运行的,您可以使用以下技巧: bazel run——在“echo”//path/to/folder:target下运行 这将打印磁盘上二进制文件的完整路径(在bazel缓存文件夹中) 获取目标的输出路径的更通用方法是通过aquery,例如 bazel aquery”

我知道有
bazel info bazel bin
,但这只是给出了输出路径前缀。我希望通过一些奇特的
cquery
aquery
来获得输出的完整路径。

据我所知,没有一种简单的方法可以实现这一点(请参见下面的相关讨论),但如果您的目标是可运行的,您可以使用以下技巧:

bazel run——在“echo”//path/to/folder:target下运行
这将打印磁盘上二进制文件的完整路径(在bazel缓存文件夹中)

获取目标的输出路径的更通用方法是通过
aquery
,例如

bazel aquery”//path/to/folder:target”--noinclude\u命令行--output=text
这将打印与给定目标相关的所有操作的输出(对于
cc_二进制文件
,这些操作将包括对象文件、二进制文件、剥离二进制文件等)-然后您可以grep for
outputs
并提取路径

这是
cc\u二进制文件的示例输出:

>bazel aquery”//path/to/folder:target”--noinclude\u命令行--output=text
操作“编译路径/to/folder/main.cc”
助记符:cppcile
Target://path/to/folder:Target
配置:k8fastbuild
操作键:。。。
输入:[……,路径/to/folder/main.cc]
输出:[bazel out/k8 fastbuild/bin/path/to/folder/_objs/target/main.pic.d,
bazel out/k8 fastbuild/bin/path/to/folder/_objs/target/main.pic.o]
...
操作“链接路径/到/文件夹/目标”
助记符:CppLink
Target://path/to/folder:Target
配置:k8fastbuild
操作键:。。。
输入:[…,bazel out/k8 fastbuild/bin/path/to/folder/_objs/target/main.pic.o,…]
输出:[bazel out/k8 fastbuild/bin/path/to/folder/target]
操作“为//path/to/folder:target剥离路径/to/folder/target.stripped”
助记符:CcStrip
Target://path/to/folder:Target
配置:k8fastbuild
操作键:。。。
输入:[……,bazel out/k8 fastbuild/bin/path/to/folder/target]
输出:[bazel out/k8 fastbuild/bin/path/to/folder/target.stripped]
...
...
...
路径是相对的,但您可以通过使用
bazel info workspace
获取工作区文件夹来解析它们

如果您对特定操作的输出感兴趣,例如链接产生的最终二进制文件,您可以按助记符类型进行筛选:

bazel aquery“助记符(CppLink,//path/to/folder:target)”--noinclude\u命令行--output=text 操作“链接路径/到/文件夹/目标” 助记符:CppLink Target://path/to/folder:Target 配置:k8fastbuild 操作键:。。。 输入:[…,bazel out/k8 fastbuild/bin/path/to/folder/_objs/target/target.pic.o,…] 输出:[bazel out/k8 fastbuild/bin/path/to/folder/target]
不是一个完整的答案,但希望这有帮助

其他相关讨论: