2016-01-15 17 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.