Loops Makefile中两个集合上的同时迭代
下面是两个make变量的简单循环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 提前表示衷心的感谢 首先,您应该记住,这
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脚本。谢谢(也感谢博博戈!)。