2016-01-15 19 views
0

同步迭代下面是一個簡單的循環在兩個make變量,超過兩套的Makefile

a=1 2 3 
b=5 6 7 

test: 
    @for x in $(a);\ 
    do \ 
      for y in $(b);\ 
      do\ 
        echo $$x $$y; \ 
      done \ 
    done 

產生

1 5 
1 6 
1 7 
2 5 
2 6 
... 

等相反,我想只得到

1 5 
2 6 
3 7 

提前致謝!

回答

1

首先你應該記住,這個命令純粹是shell,而不是make的內部語法,所以它不是真正的可移植的。

你可以做例如爲:

SHELL:=bash 
all: 
    a=(1 2 3); \ 
    b=(5 6 7); \ 
    for i in `seq 0 $$(($${#a[@]}-1))`; do \ 
     echo "$${a[$$i]} => $${b[$$i]}"; \ 
    done 

然而,這通常是壞主意,這樣做。它幾乎不可讀,並且更改默認的shell make使用可能會有影響。您可能最好只編寫單獨的腳本,並通過普通的makefile命令執行將數據傳遞給它。

+0

我基本上以你的建議結束:只寫一個在Makefile中執行的python腳本。謝謝(還包括bobbogo!)。 – user45893

2

你可以用普通的製作。 這裏是一個(遞歸)的功能,將配對相應參數:

pairup = $(if $1$2,$(firstword $1):$(firstword $2) $(call pairup,$(wordlist 2,$(words $1),$1),$(wordlist 2,$(words $2),$2))) 

使用它在生成文件是這樣的:

a := 1 2 3 
b := a b c 
$(error [$(call pairup,$a, $b)]) 

給予,在所述殼:

$ make 
Makefile:4: *** [1:a 2:b 3:c ]. Stop.