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

时间:2015-09-16 19:43:50

标签: 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

稍后此输出将放在我使用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

我做错了什么?

编辑:解决方案

我用它作为@ 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

1 个答案:

答案 0 :(得分:3)

这对我来说在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

请注意,这在配方中有循环 - 这是我推断你正在做的事情。如果您希望循环在规则之外运行,解决方案将看起来完全不同。

相关问题