2016-03-06 110 views
0

我试图创建一个带有通配符目标的makefile,但通配符应该匹配变量。GNU make通配符变量目标

所以我有一个makefile这样的:

A_OUT := bin/a 
B_OUT := bin/b 

# This does not work 
$(%_OUT): 
    @echo [email protected] 

输出:

$ make bin/a 
make: *** No rule to make target 'bin/a'. Stop. 

我不能使用bin/%:,因为变量可能指向其他目录。

在GNU make中有没有办法做到这一点?

+0

为什么你就不能使用'斌/ %'?作为目录的目标是什么改变了这个?你打算在目标中做什么,你的建议片段会使用'bin /%'来做到这一点? –

+1

@EtanReisner我无法像这样调用它:'make A_OUT = anotherdir/a anotherdir/a' –

回答

2

如果您只是想要所有目标列表都具有相同的配方,那么只需在同一个规则定义中列出它们。例如

$(A_OUT) $(B_OUT): 
     @echo [email protected] 

您可以使用一个变量太:

A_OUT := bin/a 
TGTS += $(A_OUT) 
B_OUT := bin/b 
TGTS += $(B_OUT) 

$(TGTS): 
     @echo [email protected] 

取决于你需要什么,你也可能要使用Static Pattern Rules

$(TGTS) : bin/% : 
     @echo [email protected] : $*