使用 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:
我的问题:
- 这是automake的做法吗? (
LDADD
和 rmt_LDADD
)
- 是否有更短或更好的方法?
为什么不用变量名构造?它只是简单的:
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)
考虑这个简短的 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:
我的问题:
- 这是automake的做法吗? (
LDADD
和rmt_LDADD
) - 是否有更短或更好的方法?
为什么不用变量名构造?它只是简单的:
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)