如何在父级中使用shell循环变量设置submake全局变量

时间:2019-04-18 23:20:17

标签: makefile

我是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

然后我从命令提示符处调用:
退步

1 个答案:

答案 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_$*) >$@