Вздох
Да, вы можете сделать это, но это будет уродливый взлом и полностью противоречит тому, как Make предназначен для работы.
Набор целей, которые вы передаете Make, это набор целей , а не структурированная команда с синтаксисом. Ожидается, что Make соберет их всех. Если make-файл включает рецепт для цели foo
, то Make должен построить цель foo
определенным образом, независимо от того, вызывается ли она как Make foo
или Make foo bar
или Make bar foo
. То, что вы пытаетесь сделать, нарушает общепринятое поведение Make, поэтому вам следует попробовать другой подход.
Если вы все еще хотите это сделать, вы можете сделать это так:
SUBDIRS := a b c
.PHONY: clean
ifneq ($(filter $(SUBDIRS), $(MAKECMDGOALS)),)
$(SUBDIRS) :
@echo make - C $@ $(MAKECMDGOALS)
clean:
@: # do nothing
else
all :
@echo default
clean :
@echo cleaning
endif