Я нахожусь в (явном) меньшинстве, которое не согласно с «Рекурсивным делать считается вредным» Я написал рекурсивные системы Make для больших, грязных баз кода, и они работают довольно хорошо.
Вот как это сделать:
all: $(SUBDIRS)
$(SUBDIRS): force
@ $(MAKE) -s -C $@
.PHONY: force
force :;
(я добавил -s, чтобы сделать вещи тише.)
EDIT :
Чтобы передать цель субмакам (я должен был сделать это раньше):
.PHONY: all check clean
all check clean: $(SUBDIRS)
all: TARGET=all
check: TARGET=check
clean: TARGET=clean
# No, you can't do TARGET=$@, or at least I don't know how to.
# recursive call to make
$(SUBDIRS): force
@ $(MAKE) -s -C $@ $(TARGET)
.PHONY: force
force :;