在我的GNUmakefile中,我想要一个使用临时目录的规则。例如:
out.tar: TMP := $(shell mktemp -d)
echo hi $(TMP)/hi.txt
tar -C $(TMP) cf $@ .
rm -rf $(TMP)
如上所述,当前规则的编写方式会在解析规则时创建临时目录。这意味着,即使我不总是制作out.tar,也会创建许多未使用的临时目录。 我想避免我的/tmp被无用的临时目录填满。
有没有办法使变量仅在规则被触发时被定义,而不是在定义它时就立即生效?
我的主要想法是将mktemp和tar转储到shell脚本中,但这似乎有些难看。
$(eval $@_TMP := $(shell mktemp -d))
会在Makefile首次评估时发生,而不是按规则程序顺序执行。换句话说,$(eval ...)
比你想象的要早。虽然对于这个例子来说可能没问题,但这种方法会给某些连续操作造成问题。 - JamesThomasMoonmake
,似乎在第一次评估Makefile时不会执行。换句话说,文件夹不会像预期的那样通过make
创建,只有通过make TEST
才能创建。https://gist.github.com/jsign/c7313f359daa99c02bafb222becacad3 - Ignacio Hagopian@$(eval export TMP = : $(shell mktemp -d))
。 - undefined