我有一个genrule
生成一些输出文件,但我正在使用的工具需要知道放置文件的位置。
到目前为止,我已经能够使用dirname $(location outputfile)
开始工作了,但这似乎是一个非常脆弱的解决方案
答案 0 :(得分:2)
您可以在此处了解genrule
中哪些make变量可用:
https://docs.bazel.build/versions/master/be/make-variables.html
特别是:
@D:输出目录。如果
outs
中只有一个文件名,则为此 扩展到包含该文件的目录。如果有多个 文件名,这个变量反而扩展到包的根目录 即使所有生成的文件都属于genfiles
树,中的目录 到同一个子目录!如果genrule需要生成临时 中间文件(可能是因为使用了一些其他工具 编译器)然后它应该尝试将临时文件写入@D
(虽然/tmp
也是可写的),并删除任何此类内容 生成临时文件。特别是,避免写入目录 包含输入 - 它们可能位于只读文件系统上,即使是 他们不是这样做的,这样就会破坏源树。
一般情况下,如果该工具允许您(或者如果您正在编写自己的工具),那么最好为工具提供单独的输入和输出文件名。例如,如果工具仅将输入理解为目录,并且如果目录仅包含您想要的内容通常可以,但如果它不包含,那么您必须依靠沙盒来显示工具只需要您想要的文件,或者您必须手动创建临时目录。作为目录的输出使您无法控制输出的命名,您仍然需要枚举genrule
outs
中的文件。