我知道这里有bazel info <...> bazel-bin
,但这只是给输出路径前缀。我希望花些点cquery
或aquery
来获得输出的完整路径。
答案 0 :(得分:1)
据我所知,没有一种简单的方法(请参阅下面的相关讨论),但是如果目标是可运行的,则可以使用this妙招:
bazel run --run_under "echo" //path/to/folder:target
这将在磁盘上(在bazel缓存文件夹中)打印二进制文件的完整路径。
获取目标输出路径的更通用的方法是通过aquery
,例如
bazel aquery "//path/to/folder:target" --noinclude_commandline --output=text
这将打印与给定目标有关的所有动作的输出(对于cc_binary
,将包括目标文件,二进制文件,剥离的二进制文件等)-然后,您可以grep Outputs
并提取路径。
这是cc_binary
的示例输出:
> bazel aquery "//path/to/folder:target" --noinclude_commandline --output=text
action 'Compiling path/to/folder/main.cc'
Mnemonic: CppCompile
Target: //path/to/folder:target
Configuration: k8-fastbuild
ActionKey: ...
Inputs: [..., path/to/folder/main.cc]
Outputs: [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]
...
action 'Linking path/to/folder/target'
Mnemonic: CppLink
Target: //path/to/folder:target
Configuration: k8-fastbuild
ActionKey: ...
Inputs: [..., bazel-out/k8-fastbuild/bin/path/to/folder/_objs/target/main.pic.o, ...]
Outputs: [bazel-out/k8-fastbuild/bin/path/to/folder/target]
action 'Stripping path/to/folder/target.stripped for //path/to/folder:target'
Mnemonic: CcStrip
Target: //path/to/folder:target
Configuration: k8-fastbuild
ActionKey: ...
Inputs: [..., bazel-out/k8-fastbuild/bin/path/to/folder/target]
Outputs: [bazel-out/k8-fastbuild/bin/path/to/folder/target.stripped]
...
...
...
路径是相对的,但是您可以通过使用bazel info workspace
获取 workspace 文件夹来解决它们。
如果您对特定操作的输出感兴趣,例如链接产生的最终二进制文件,则可以按助记符类型进行过滤:
> bazel aquery "mnemonic(CppLink, //path/to/folder:target)" --noinclude_commandline --output=text
action 'Linking path/to/folder/target'
Mnemonic: CppLink
Target: //path/to/folder:target
Configuration: k8-fastbuild
ActionKey: ...
Inputs: [..., bazel-out/k8-fastbuild/bin/path/to/folder/_objs/target/target.pic.o, ...]
Outputs: [bazel-out/k8-fastbuild/bin/path/to/folder/target]
没有完整的答案,但希望对您有所帮助。
其他相关讨论: