2012-03-14 23 views
0

在Makefile中,我想從前提條件列表中引用目標名稱並使用它構建某些內容。形式的東西:從前提條件列表中引用目標名稱

%.foo: $(addsuffix .bar, $(DATA_%)) 
    @echo $< 

這樣,假設您有:

DATA_test = 1 2 3 

當你稱呼其爲:

make test 

,將擴大到:

1.bar 2.bar 3.bar 

這是可能的嗎?什麼會更好地解決這個問題?

回答

1

如果你的Make版本有secondary expansion,這可能會起作用(我無法測試它,因爲今天我所有的東西都是舊版本)。

.SECONDEXPANSION: 

%.foo: $$(addsuffix .bar, $$(DATA_$$*)) 
    @echo $^ 

不這樣做,我看不出有什麼更好的辦法來做到這一點比這

define FOO_RULE 
$(1).foo: $(addsuffix .bar,$(DATA_$(1))) 
endef 

FOO_TYPES = test real whatever 

$(foreach t,$(FOO_TYPES),$(eval $(call FOO_RULE,$(t)))) 

%.foo: 
    @echo building [email protected] from $^ 
+0

第二膨脹完美的作品!謝謝!我之前已經嘗試過,但是我並沒有將addsuffix前面的$加倍。這工作得更好,並且非常有意義。 – 2012-03-14 19:31:34

+0

在二次擴展和eval可用之前的舊版本中,它的做法是利用make的自動重新make makefile功能。你會寫一條規則來生成包含生成目標的makefile片段,然後包含該片段。它工作的很好,雖然效率不高,調試可能會很棘手(儘管eval具有相同的問題:至少在自動生成的makefile中,當有東西橫向移動時,您可以使用makefile輸出來查看)。 – MadScientist 2012-03-14 22:01:41

相關問題