makefiletemporary-files

How can I automatically create (and remove) a temp directory in a Makefile?


Is it possible to have make create a temp directory before it executes the first target? Maybe using some hack, some additional target etc.?

All commands in the Makefile would be able to refer to the automatically created directory as $TMPDIR, and the directory would be automatically removed when the make command ends.


Solution

  • I seem to recall being able to call make recursively, something along the lines of:

    all:
        -mkdir $(TEMPDIR)
        $(MAKE) $(MFLAGS) old_all
        -rm -rf $(TEMPDIR)
    
    old_all: ... rest of stuff.
    

    I've done similar tricks for calling make in subdirectories:

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

    Just checked it and this works fine:

    $ 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