2013-02-12 74 views
0

我試圖讓一個變量被解釋爲for循環中的另一個變量,我無法弄清楚這應該如何完成。我的測試是:makefile在循環中解釋變量

TEST= one two three 

one := one1 
two := two2 
three := three3 

all: 
    @echo $(TEST) 
    @for NUM in $(TEST) ; do \ 
     echo $($$NUM) ; \ 
    done ; exit 0 

foo: 
    echo 

最終結果是:我有很多的makefile與包括指向一箇中心makefile文件。我想讓這些獨立的makefile包含文件的變量來一起協調 - 但不同的目錄有不同的文件。因此,./1/中的makefile可能是: one:=「file0 file1 file2」 two:=「other0 other1 other2」 three:=「boo.txt blah.txt」 include ../main.mk

和./2/可能是 之一:= 「file0 file5 file6」 二:= 「富酒吧巴茲」 三:= 「blah.txt」 包括../main.mk

回答

1

那不能按照你寫的方式工作。你正在穿越邊界。

當你的shell循環運行時,make變量已經被擴展了,所以你的循環體最終包含的是'echo;'。

如果您想獲得預期的輸出,您需要在make級別進行循環。

喜歡的東西:

TEST= one two three 

one := one1 
two := two2 
three := three3 

define loop 
     $(foreach n,$(TEST),@echo $($n) 
) 
endef 

all: 
     @echo $(TEST) 
     $(loop) 

雖然我覺得應該有一個稍微簡單的辦法,我只是沒有看到它的那一刻。