Make:在静态模式规则中设置特定于目标的变量

时间:2017-02-02 22:29:44

标签: makefile gnu-make

我正在使用静态模式规则编写Makefile,我想为TARGETS的每个元素分配一个赋予当前目标名称的变量(这里是词'%')。

TARGETS = a b c d

all : $(TARGETS)
$(TARGETS) : % : DIR = %
$(TARGETS) : % : %_setup build

a_setup :
 code for a
b_setup :
 code for b
...
build
 code using "DIR = XX" previously configured

但是gnumake抱怨目标特定的变量DIR:

make: *** No rule to make target 'DIR', needed by 'a'

是否可以混合使用静态模式规则和变量赋值?谢谢!

1 个答案:

答案 0 :(得分:1)

根据GNU制作手册,您不能这样做。但是,您可以使用$@。在您的示例中,您可以直接指定DIR=$@,但更常见的是,您可以将$@patsubst结合使用:

TARGETS = a b c d
all : $(TARGETS)
$(TARGETS) : DIR = $(patsubst %,%,$@)
$(TARGETS) : % : %_setup build
        echo $@: DIR:$(DIR)
%_setup :
        echo $@
build:
        echo $@