如何在bazel中获取目标目录

时间:2018-01-23 09:55:46

标签: bazel

我有一个genrule生成一些输出文件,但我正在使用的工具需要知道放置文件的位置。

到目前为止,我已经能够使用dirname $(location outputfile)开始工作了,但这似乎是一个非常脆弱的解决方案

1 个答案:

答案 0 :(得分:2)

您可以在此处了解genrule中哪些make变量可用: https://docs.bazel.build/versions/master/be/make-variables.html

特别是:

  

@D:输出目录。如果outs中只有一个文件名,则为此   扩展到包含该文件的目录。如果有多个   文件名,这个变量反而扩展到包的根目录   即使所有生成的文件都属于genfiles树,中的目录   到同一个子目录!如果genrule需要生成临时   中间文件(可能是因为使用了一些其他工具   编译器)然后它应该尝试将临时文件写入@D   (虽然/tmp也是可写的),并删除任何此类内容   生成临时文件。特别是,避免写入目录   包含输入 - 它们可能位于只读文件系统上,即使是   他们不是这样做的,这样就会破坏源树。

一般情况下,如果该工具允许您(或者如果您正在编写自己的工具),那么最好为工具提供单独的输入和输出文件名。例如,如果工具仅将输入理解为目录,并且如果目录仅包含您想要的内容通常可以,但如果它不包含,那么您必须依靠沙盒来显示工具只需要您想要的文件,或者您必须手动创建临时目录。作为目录的输出使您无法控制输出的命名,您仍然需要枚举genrule outs中的文件。