使用 GNU Make 选择参数

Choosing Arguments with GNU Make

考虑这个简短的 Makefile:

ARGS       := -foo
my_ARGS    := -bar
their_ARGS :=

all: your.foo my.foo their.foo

%.foo:
    @echo $*: $(call _choose_,ARGS,$*)

_isndef_ = $(findstring undefined,$(origin ))
_choose_ = $(value $(if $(call _isndef_,_),,_))

它正确输出:

your: -foo
my: -bar
their:

我的问题:

为什么不用变量名构造?它只是简单的:

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/

如果你想 "override with empty" 你可以使用 target-specific variables:

ARGS := -foo

my.foo:    ARGS := -bar
their.foo: ARGS :=

all: your.foo my.foo their.foo

%.foo:
        @echo $*: $(ARGS)