在Makefile中同时迭代两组

时间:2016-01-15 10:37:15

标签: loops makefile gnu-make

以下是两个make变量的简单循环,

scipy.sparse.csr.csr_matrix

产生

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
...

提前非常感谢!

2 个答案:

答案 0 :(得分:2)

你可以在简单的 make 中完成。 这是一个(递归)函数,它将配对相应的参数:

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

在这样的makefile中使用它:

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

在shell中给出:

IndependentAxis

答案 1 :(得分: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使用可能会产生影响。您最好只编写单独的脚本,并通过普通的makefile命令执行将数据传递给它。