理想情况下,我希望能够在不进行构建的情况下获取一个目标输出文件列表。我认为这可以通过运行后分析的cquery实现,但是我不知道如何操作。
output.cquery
文件。def format(target):
outputs = target.files.to_list()
return outputs[0].path if len(outputs) > 0 else "(missing)"
bazel cquery //a/b:bundle --output starlark \
--starlark:file=output.cquery 2>/dev/null
bazel-out/darwin-fastbuild/bin/a/b/something-bundle.zip
关于cquery的更多信息,请参阅文档。
我对Engene的答案进行了轻微的改进,因为目标的输出可能是多个:
bazel cquery --output=starlark \
--starlark:expr="'\n'.join([f.path for f in target.files.to_list()])" \
//foo:bar
bazel query
命令来获取这些信息,还是想在分析过程中获取?我不认为有一种方法可以使用 bazel query
来获取输出文件的确切期望绝对路径(甚至是工作区相对路径,例如 bazel-out/foo/bar/baz.txt
)。DefaultInfo
)。--output files
来实现。bazel cquery //a/b:bundle --output files 2>/dev/null
# bazel-out/darwin-fastbuild/bin/a/b/something-bundle.zip
bazel cquery 'kind("output files", //foo)'
并返回一个输出文件列表。现在我想起来了,为了解决我正在尝试解决的问题,我可以创建一个 bazel 规则,将其依赖项的输出文件转储到文本文件中。当然,那仍然需要进行构建,所以这并没有回答我的原始问题。 - larry