У меня есть каталог "lib" в моих приложениях основной каталог, который содержит произвольное число подкаталогов, каждый имеющий его собственный Make-файл.
Я хотел бы иметь единственный Make-файл в основном каталоге, который называет Make-файл каждого подкаталога. Я знаю, что это возможно, если бы я вручную перечисляю subdirs, но я хотел бы сделать его автоматически.
Я думал о чем-то как следующее, но это, очевидно, не работает. Обратите внимание, что я также имею чистый, тест, и т.д. цели, таким образом, % является, вероятно, не хорошей идеей вообще.
LIBS=lib/*
all: $(LIBS)
%:
(cd $@; $(MAKE))
Любая справка ценится!
С GNU будет работать следующее:
LIBS=$(wildcard lib/*)
all: $(LIBS)
.PHONY: force
$(LIBS): force
cd $@ && pwd
Если в lib
может быть нечто иное, чем каталоги, вы можете альтернативно использовать:
LIBS=$(shell find lib -type d)
Для решения проблемы множественных целей можно собрать специальные цели для каждого каталога, а затем убрать префикс для суббилдинга:
LIBS=$(wildcard lib/*)
clean_LIBS=$(addprefix clean_,$(LIBS))
all: $(LIBS)
clean: $(clean_LIBS)
.PHONY: force
$(LIBS): force
echo make -C $@
$(clean_LIBS): force
echo make -C $(patsubst clean_%,%,$@) clean