Makefile提取while的值

Makefile提取while的值,makefile,while-loop,Makefile,While Loop,我在Makefile中做了一个while循环,但我不知道如何“提取/更新”条件变量的值: i := 0 .PHONY: syslog syslog: $Q i=$(i) ; \ while [ $${i} -le 7 ] ; do \ if grep -q local$$i.* "$(SYSLOG)" ; then i=`expr $$i + 1` ; else printf "\n\!myapp\nlocal$$i.*\t\t\t\t\t-/v

我在Makefile中做了一个while循环,但我不知道如何“提取/更新”条件变量的值:

i := 0

.PHONY: syslog
syslog:
    $Q i=$(i) ; \
         while [ $${i} -le 7 ] ; do \
           if grep -q local$$i.* "$(SYSLOG)" ; then i=`expr $$i + 1` ; else printf "\n\!myapp\nlocal$$i.*\t\t\t\t\t-/var/log/myapp.log\n" >> $(SYSLOG) && i=`expr $$i` && break ; fi ; \
         done ; \
       true ; \
    $Q echo "$i"

我想知道,如果循环在I=2时执行printf,例如,在echo$I返回2后,它返回0,因此我无法正确提取更新的值…

您不能直接执行您的请求。首次解析makefile时,会展开makefile变量。然后,运行配方,并在该点展开配方变量,因此它们不会影响已展开的makefile变量


可以通过$make i=${i}将扩展的$${i}传递给子make,或者您可以尝试通过recipe i:=$shell echo 2

之外的shell命令设置$i:=$shell echo 2

谢谢@john最后,我将以其他方式进行设置