subdirs = prog1 prog2
clean_subdirs = $(patsubst %, clean_%, $(subdirs))

.PHONY: all clean $(subdirs) $(clean_subdirs)

all: $(subdirs)

$(subdirs):
	cd $@ && $(MAKE)

clean: $(clean_subdirs)

$(clean_subdirs): clean_% :
	cd $* && $(MAKE) clean
