(Вы, кажется, используете что-то другое, кроме GNUMake, который является единственным знакомым Make, так что возьмите это с крошкой соли.)
Сначала вы можете сделать свой Makefile более чистым, разделив компонентыцели:
COMPONENTS = make_a make_b make_c make_d make_e make_f make_g make_h make_i \
library
.PHONY: external_lib $(COMPONENTS)
$(external_lib): $(COMPONENTS)
$(COMPONENTS):
@$(MAKE) -s -C $(source_dir)/project/component $(PROJECTVARS) $@
(Если вы беспокоитесь о конфликтах имен, есть простые способы справиться с этим.)
Теперь, если вы хотите переопределить переменную, скажем, VARВы можете сделать все это в одном месте:
COMPONENTS = make_a make_b make_c make_d make_e make_f make_g make_h make_i \
library
.PHONY: external_lib $(COMPONENTS)
$(external_lib): $(COMPONENTS)
$(COMPONENTS):
@$(MAKE) -s -C $(source_dir)/project/component $(PROJECTVARS) VAR=$(VAR) $@
Это предполагает, что вы хотите переопределить одну и ту же переменную для всех компонентов, как я и прочитал вопрос.Если вы хотите переопределить другую переменную для некоторых целей, это просто:
COMPONENTS = make_a make_b make_c make_d make_e make_f make_g make_h make_i \
library
.PHONY: external_lib $(COMPONENTS)
$(external_lib): $(COMPONENTS)
VARNAME = VAR
$(COMPONENTS):
@$(MAKE) -s -C $(source_dir)/project/component $(PROJECTVARS) \
$(VARNAME)=$($(VARNAME)) $@
make_c: VARNAME=OtherVar
make_h: VARNAME=YetAnotherVar
Если вы хотите переопределить несколько переменных для некоторых целей, это немного сложно ...