当前位置: 技术问答>linux和unix
makefile里的超长变量的拆分
来源: 互联网 发布时间:2017-03-22
本文导语: 问题貌似很简单,可我折腾了一个周末也搞不定,惭愧啊。 公司有一个makefile已经用了很多年,里面有这么一行: something: $(OBJS) echo $(OBJS) >> tmpfile 本来一直很正常的能写进文件,但是几年下来这个变量OBJS越来...
问题貌似很简单,可我折腾了一个周末也搞不定,惭愧啊。
公司有一个makefile已经用了很多年,里面有这么一行:
本来一直很正常的能写进文件,但是几年下来这个变量OBJS越来越长,现在有几万个字符,终于写不进文件了,估计是命令的缓冲区不够用了。
于是我打算把这个变量拆开。最先尝试的是:
echo -e $(foreach x, $(OBJS), $(x)\n) >> tmpfile
还有
$(foreach x, $(OBJS), echo $(x) >> tmpfile;)
运行的结果和修改之前类似,但是如果我把$(OBJS)换成一个短的变量就可以,看来即使循环也同样存在缓冲区的问题。
接下来我又想到了awk
echo $(OBJS) | awk -F " " '{ ORS=" "; for (i=1;i
公司有一个makefile已经用了很多年,里面有这么一行:
something: $(OBJS)
echo $(OBJS) >> tmpfile
本来一直很正常的能写进文件,但是几年下来这个变量OBJS越来越长,现在有几万个字符,终于写不进文件了,估计是命令的缓冲区不够用了。
于是我打算把这个变量拆开。最先尝试的是:
echo -e $(foreach x, $(OBJS), $(x)\n) >> tmpfile
还有
$(foreach x, $(OBJS), echo $(x) >> tmpfile;)
运行的结果和修改之前类似,但是如果我把$(OBJS)换成一个短的变量就可以,看来即使循环也同样存在缓冲区的问题。
接下来我又想到了awk
echo $(OBJS) | awk -F " " '{ ORS=" "; for (i=1;i