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