я припоминаю, будучи в состоянии вызвать сделать рекурсивно, то вдоль линий:
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
Это работает, но, конечно, только если пользователь говорит «make», не указав цель. Так что «сделать все» не получится. – Frank
Я ожидаю, что пользователь узнает, что они делают :-), поэтому они будут использовать «make» или «make toplevel». В любом случае вы можете изменить «все» на «old_all» и «toplevel» на «all», если вы хотите этого поведения. – paxdiablo
Обновлено так, что вы можете «сделать все», что также является стандартом по умолчанию. – paxdiablo