Makefile:在for循环中调用多行变量

Makefile:在for循环中调用多行变量,makefile,Makefile,这是我的密码: la := a b c d lb := 1 2 3 4 define test = First line $$vara Second line $$varb endef export test @for vara in $(la); do \ for varb in $(lb); do \ echo $$vara $$varb; \ echo "$$test"; \ done \ done 稍后,该输出将进入我

这是我的密码:

la := a b c d
lb := 1 2 3 4

define test =
    First line $$vara
    Second line $$varb
endef
export test

@for vara in $(la); do \
    for varb in $(lb); do \
        echo $$vara $$varb; \
        echo "$$test"; \
    done \
done
稍后,该输出将进入我使用
cat
创建的文件中

我期待着像这样的事情

a 1
First line a
Second line 1
a 2
First line a 
Second line 2
...
但是相反,我得到了

a 1
$vara $varb
a 2 
$vara $varb
我做错了什么

编辑:解决方案

我将其用作base@Beta的答案,并对其进行了一些修改,以允许它将结果保存在一个文件中,并通过SSH将其发送到另一个终端

define test
[program:$$s-$$c]\nString 1\nString 2\n...\nThe End.
endef
export test

testmake:
    @for s in $(serv); do \
        for c in $(cust); do \
            ssh user@host "mkdir -p /var/log/$$s/$$c"; \
            echo "$(call test)" | ssh user@host "cat > /test.txt"; \
        done \
    done

这在GNU Make 3.81中对我很有用(但是版本之间有一些细微的差别,所以您可能需要对其进行调整):


注意,这有一个食谱中的循环——这就是我推断你正在做的。如果您希望循环在规则之外运行,则解决方案看起来会完全不同。

谢谢您的回答!稍加修改后,将字符串存储在文件中也可以很好地工作。我将用我的最终解决方案编辑我的答案。
define test
  echo First line $$vara; \
  echo Second line $$varb
endef
export test

some_rule:
    @for vara in $(la); do \
      for varb in $(lb); do \
       echo $$vara $$varb; \
       $(call test); \
      done \
     done