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