我是make的新手,无法将shell循环变量传递给我的submake调用,希望您能帮助您了解如何执行此操作。在makefile中,我需要在每次父级循环运行时更改submake的全局变量,以便可以根据循环计数执行不同的操作。
尝试了很多不同的东西,例如$(eval regress_loop = $$ shell_loop),export regress_loop = $$ shell_loop以及make调用中的$$ variable,$(variable),$($(variable)),所有这些都没有成功。
编辑后添加makefile的相关行(不是直接粘贴代码):
SHELL := /bin/bash
regress_loop ?= 2
run:
echo "Regress Loop: $(regress_loop)"
ifeq ($(regress_loop), 1)
<cmd1> # run one flavor of command
else
<cmd2> # run another flavor of command
endif
regress:
shell_loop=1; while [ $$shell_loop -lt 3 ]; do \
echo "Testcase $$shell_loop ..."; \
$(MAKE) -e regress_loop=$$shell_loop run > regress.$${shell_loop}.log; \
shell_loop=`echo $$shell_loop+1 | bc`; \
done
然后我从命令提示符处调用:
退步
答案 0 :(得分:0)
make
中的首选解决方案通常是使用显式依赖关系,并让make
自己确定需要执行多少次操作。
例如;
numbers := 1 2
.PHONY: regress
regress: $(patsubst %,regress.%.log,$(numbers))
regress.1.log:
<cmd1> >$@
regress.2.log:
<cmd2> >$@
一种可能可以推广的方法是为每个目标定义一个变量。 make
没有数组,所以这有点笨拙,但是可以使用:
numbers := 1 2
run_1 := <cmd1>
run_2 := <cmd2>
.PHONY: regress
regress: $(patsubst %,regress.%.log,$(numbers))
regress.%.log:
$(run_$*) >$@