Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops Makefile中两个集合上的同时迭代_Loops_Makefile_Gnu Make - Fatal编程技术网

Loops Makefile中两个集合上的同时迭代

Loops Makefile中两个集合上的同时迭代,loops,makefile,gnu-make,Loops,Makefile,Gnu Make,下面是两个make变量的简单循环 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 提前表示衷心的感谢 首先,您应该记住,这

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

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

提前表示衷心的感谢

首先,您应该记住,这个命令纯粹是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命令执行将数据传递给它。

首先,您应该记住,此命令纯粹是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命令执行将数据传递给它。

您可以用普通make来完成。 下面是一个(递归)函数,它将配对相应的参数:

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.
你可以做得很简单。 下面是一个(递归)函数,它将配对相应的参数:

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.

我基本上是以您的建议结束的:只需编写一个在Makefile中执行的python脚本。谢谢(也感谢bobbogo!)。我基本上得到了你的建议:只需编写一个在Makefile中执行的python脚本。谢谢(也感谢博博戈!)。