考虑这个简短的Makefile:
ARGS := -foo
my_ARGS := -bar
their_ARGS :=
all: your.foo my.foo their.foo
%.foo:
@echo $*: $(call _choose_,ARGS,$*)
_isndef_ = $(findstring undefined,$(origin $1))
_choose_ = $(value $(if $(call _isndef_,$2_$1),$1,$2_$1))
正确输出:
your: -foo
my: -bar
their:
我的问题:
LDADD
和rmt_LDADD
)答案 0 :(得分:1)
为什么不使用变量名称构造?这只是简单的:
ARGS := -foo
my_ARGS := -bar
their_ARGS :=
all: your.foo my.foo their.foo
%.foo:
@echo $*: $(or $($*_ARGS),$(ARGS))
此处有更多信息,例如:http://make.mad-scientist.net/constructed-macro-names/
如果您想“覆盖为空”,可以使用target-specific variables:
ARGS := -foo
my.foo: ARGS := -bar
their.foo: ARGS :=
all: your.foo my.foo their.foo
%.foo:
@echo $*: $(ARGS)