我正在使用静态模式规则编写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'
是否可以混合使用静态模式规则和变量赋值?谢谢!
答案 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 $@