Bazel风格提供临时目录吗?

时间:2019-03-05 11:26:45

标签: bazel

Bazel是否为genrules中的temp目录提供变量替换?

有时候,在创建最终输出人工制品之前,需要一个暂存区。

我在想像这样的东西:

genrule(
    name = "example",
    srcs = [ "a.txt" ],
    cmd = "cp $< $(TMP)/b.txt && cp $(TMP)/b.txt $@",
)

$(TMP)将是Bazel在每次执行规则时为我生成的文件夹。

2 个答案:

答案 0 :(得分:1)

我将自己的风格迁移到了完整的Starlark规则。我可以做的

tmp = ctx.actions.declare_directory("TMP_" + ctx.label.name)

,然后将该目录用作我的临时文件。

它类似于https://docs.bazel.build/versions/2.0.0/skylark/rules-tutorial.html#creating-a-file中的Starlark教程显示的内容。区别在于我没有将该目录注册为输出。也就是说,我不要做类似的事情

return [DefaultInfo(files = depset([tmp]))]

答案 1 :(得分:0)

不,不是。 (从Bazel版本0.23.1开始)

尽管它确实设置了$TMPDIR(即使使用--incompatible_strict_action_env也是如此),所以mktemp应该可以工作。但是$TMPDIR绝不是专用的临时目录(通常只是/tmp),所以请小心clobber