tôi dường như nhớ lại việc có thể gọi thực hiện đệ quy, một cái gì đó dọc theo dòng:
all:
-mkdir $(TEMPDIR)
$(MAKE) $(MLAGS) old_all
-rm -rf $(TEMPDIR)
old_all: ... rest of stuff.
tôi đã thực hiện thủ đoạn tương tự để làm trong thư mục con:
all:
@for i in $(SUBDIRS); do \
echo "make all in $$i..."; \
(cd $$i; $(MAKE) $(MLAGS) all); \
done
Chỉ cần kiểm tra nó và điều này hoạt động tốt:
$ 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
Điều đó hoạt động, nhưng tất nhiên chỉ khi người dùng nói 'làm' mà không chỉ định mục tiêu. Vì vậy, 'làm cho tất cả' sẽ không hoạt động, vv. – Frank
Tôi hy vọng người dùng biết họ đang làm gì :-) để họ sử dụng "làm" hoặc "làm cho toplevel". Trong mọi trường hợp, bạn có thể thay đổi "tất cả" thành "old_all" và "toplevel" thành "all" nếu bạn muốn hành vi đó. – paxdiablo
Đã cập nhật để bạn có thể "tạo tất cả" cũng là quy tắc mặc định. – paxdiablo