考虑以下make文件
all: @for x in y z; \ do \ for a in b c; \ do \ echo $$x$$a >> log_$$x; \ done; \ done
执行此make文件时,创建了两个文件log_y和log_z。 log_y具有数据“yb”和“yc”。类似地,log_z具有数据“zb”和“zc”。
实际上我想创建四个文件(log_y_b,log_y_c,log_z_b,log_z_c)。为此,我已将上述make文件修改为,
all: @for x in y z; \ do \ for a in b c; \ do \ echo $$x$$a >> log_$$x_$$a; \ done; \ done
但它只创建一个文件log_。我应该怎么做才能创建四个文件。
答案 0 :(得分:4)
也许在变量名称周围添加括号:它适用于我的系统。
all:
@for x in y z; \
do \
for a in b c; \
do \
echo $$x$$a >> log_$${x}_$${a}; \
done; \
done
您还可以使用foreach:
all:
@$(foreach x,y z,$(foreach a,b c,echo $(x)$(a) >> log_$(x)_$(a);))
答案 1 :(得分:1)
log_$$x_$$a
变为log_$x_$a
,相当于log_${x_}${a}
。但是,变量$x_
未定义,因此shell将其替换为空字符串。
解决方案:正确地在名称($x
)周围用花括号写${variablename}
变量,即为了保持一致,写log_${x}_${a}
(或在 Makefile 样式中:log_$${x}_$${a}
)。