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

时间:2019-11-12 12:21:43

标签: bazel

我知道这里有bazel info <...> bazel-bin,但这只是给输出路径前缀。我希望花些点cqueryaquery来获得输出的完整路径。

1 个答案:

答案 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]

没有完整的答案,但希望对您有所帮助。

其他相关讨论: