当前位置:  开发笔记 > 编程语言 > 正文

如何在Makefile中自动创建(和删除)临时目录?

如何解决《如何在Makefile中自动创建(和删除)临时目录?》经验,为你挑选了4个好方法。

是否可以make在执行第一个目标之前创建临时目录?也许使用一些黑客,一些额外的目标等?

Makefile中的所有命令都可以引用自动创建的目录$TMPDIR,并在make命令结束时自动删除目录.



1> derobert..:

至少使用GNU make,

TMPDIR := $(shell mktemp -d)

会得到你的临时目录.除了rmdir "$(TMPDIR)"作为all目标的一部分显而易见之外,我无法想出一个最好的方法来清理它.



2> 小智..:

这些先前的答案要么不起作用,要么看起来过于复杂.这是一个更直接的例子,我能够弄清楚:

PACKAGE := "audit"
all:
    $(eval TMP := $(shell mktemp -d))
    @mkdir $(TMP)/$(PACKAGE)
    rm -rf $(TMP)



3> paxdiablo..:

我似乎记得能够递归地调用make,这有点像:

all:
    -mkdir $(TEMPDIR)
    $(MAKE) $(MLAGS) old_all
    -rm -rf $(TEMPDIR)

old_all: ... rest of stuff.

我在子目录中做了类似的技巧:

all:
    @for i in $(SUBDIRS); do \
        echo "make all in $$i..."; \
        (cd $$i; $(MAKE) $(MLAGS) all); \
    done

刚检查一下,这很好用:

$ cat Makefile
all:
    -mkdir tempdir
    -echo hello >tempdir/hello
    -echo goodbye >tempdir/goodbye
    $(MAKE) $(MFLAGS) old_all
    -rm -rf tempdir

old_all:
    ls -al tempdir

$ make all
mkdir tempdir
echo hello >tempdir/hello
echo goodbye >tempdir/goodbye
make  old_all
make[1]: Entering directory '/home/pax'
ls -al tempdir
total 2
drwxr-xr-x+ 2 allachan None 0 Feb 26 15:00 .
drwxrwxrwx+ 4 allachan None 0 Feb 26 15:00 ..
-rw-r--r--  1 allachan None 8 Feb 26 15:00 goodbye
-rw-r--r--  1 allachan None 6 Feb 26 15:00 hello
make[1]: Leaving directory '/home/pax'
rm -rf tempdir

$ ls -al tempdir
ls: cannot access tempdir: No such file or directory



4> Stefan..:

请参阅从makefile获取makefile的名称以获取$(self)技巧

ifeq ($(tmpdir),)

location = $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
self := $(location)

%:
    @tmpdir=`mktemp --tmpdir -d`; \
    trap 'rm -rf "$$tmpdir"' EXIT; \
    $(MAKE) -f $(self) --no-print-directory tmpdir=$$tmpdir $@

else
# [your real Makefile]
%:
    @echo Running target $@ with $(tmpdir)
endif

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有