2016-03-06 99 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] : $*