用GNU Make选择参数

时间:2017-10-29 09:27:01

标签: makefile automake

考虑这个简短的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:

我的问题:

  • 这是automake这样做的方式吗? (LDADDrmt_LDADD
  • 有更短或更好的方法吗?

1 个答案:

答案 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)