сделайте подстановочные цели подкаталога

У меня есть каталог "lib" в моих приложениях основной каталог, который содержит произвольное число подкаталогов, каждый имеющий его собственный Make-файл.

Я хотел бы иметь единственный Make-файл в основном каталоге, который называет Make-файл каждого подкаталога. Я знаю, что это возможно, если бы я вручную перечисляю subdirs, но я хотел бы сделать его автоматически.

Я думал о чем-то как следующее, но это, очевидно, не работает. Обратите внимание, что я также имею чистый, тест, и т.д. цели, таким образом, % является, вероятно, не хорошей идеей вообще.

LIBS=lib/*

all: $(LIBS)

%:
  (cd $@; $(MAKE))

Любая справка ценится!

18
задан Zed 19 December 2009 в 13:23
поделиться

1 ответ

С 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
28
ответ дан 30 November 2019 в 08:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: