Bazel是否为genrules中的temp目录提供变量替换?
有时候,在创建最终输出人工制品之前,需要一个暂存区。
我在想像这样的东西:
genrule(
name = "example",
srcs = [ "a.txt" ],
cmd = "cp $< $(TMP)/b.txt && cp $(TMP)/b.txt $@",
)
$(TMP)
将是Bazel在每次执行规则时为我生成的文件夹。
答案 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。