2014-05-26 2 views
0

Я пытаюсь получить make-файл верхнего уровня, чтобы вызвать make в нескольких подпапках. Верхний уровень имеет несколько целей и важный бит показан ниже:Субмаксы не повторяются с другой целью

MAKE_DIRS := $(dir $(wildcard apps/**/Makefile)) 
.PHONY: clean_apps apps $(MAKE_DIRS) 

clean_apps: TARGET_INFO := clean 

apps clean_aps: $(MAKE_DIRS) 

$(MAKE_DIRS): 
    $(MAKE) -C [email protected] $(TARGET_INFO) 

Теперь это прекрасно работает, когда я называю цели независимо друг от друга:

make apps; make clean_apps 

Однако, если я называю их по той же командной строке с :

make clean_apps apps 

Тогда целевые приложения не говорят ничего общего. Я думаю, что это связано с зависимостью от каталогов, не изменившихся между вызовами, но я думал, что команда .PHONY позволит избежать этой проблемы ...

Я рад узнать, есть ли лучший способ справиться с это.

Спасибо, боб

+0

Это не может "работать нормально", как написано, так как есть опечатка в ней ('clean_aps'). Мы не можем вам помочь, если вы не покажете нам настоящий make-файл. – Beta

ответ

0

Это нечто гораздо проще:

SUBDIRS := $(dir $(shell find apps -name "Makefile")) 

.PHONY: all clean 

all clean: 
    $(foreach DIR, $(SUBDIRS), $(MAKE) $(MAKEFLAGS) -C $(DIR) [email protected];) 
Смежные вопросы