makefile里的超长变量的拆分
问题貌似很简单,可我折腾了一个周末也搞不定,惭愧啊。
公司有一个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<=300;i++) print $i }' >> tmpfile
echo $(OBJS) | awk -F " " '{ ORS=" "; for (i=301;i<=NF;i++) print $i }' >> tmpfile
我在bash里面试了可以成功,没想到在makefile里面就不灵了。后来我发现awk接收到的$0、$1、$NF全都是空的。这次就不是变量大小的问题了,因为我试了一个小的变量也是同样的结果。难道makefile里面的管道不是这么用的?
用cut应该比awk还简单,
echo $(OBJS) | cut -d " " -f 1-300
echo $(OBJS) | cut -d " " -f 301-
但是我的环境里面没有cut,而且即使有也可能遇到同样的管道问题。
当然还有一个思路就是把$(OBJS)的各个部分各自写入文件,但是那样不但涉及到目录结构太复杂,而且以后每次修改这个变量的时候还得记得修改这个写文件的操作,不好维护。
高手们有什么好办法吗?多谢了!
公司有一个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<=300;i++) print $i }' >> tmpfile
echo $(OBJS) | awk -F " " '{ ORS=" "; for (i=301;i<=NF;i++) print $i }' >> tmpfile
我在bash里面试了可以成功,没想到在makefile里面就不灵了。后来我发现awk接收到的$0、$1、$NF全都是空的。这次就不是变量大小的问题了,因为我试了一个小的变量也是同样的结果。难道makefile里面的管道不是这么用的?
用cut应该比awk还简单,
echo $(OBJS) | cut -d " " -f 1-300
echo $(OBJS) | cut -d " " -f 301-
但是我的环境里面没有cut,而且即使有也可能遇到同样的管道问题。
当然还有一个思路就是把$(OBJS)的各个部分各自写入文件,但是那样不但涉及到目录结构太复杂,而且以后每次修改这个变量的时候还得记得修改这个写文件的操作,不好维护。
高手们有什么好办法吗?多谢了!
...全文
相关推荐
makefile的变量用法
"Makefile变量用法"Makefile变量是Makefile中定义的名字,其用来代替一个文本字符串,该文本字符串称为该变量的值。
嵌入式复习c语言
研究数据在计算机中的存储组织管理的形式研究数据和数据的关系;线性:数据的前驱树和后继树满足1:1的关系;一前对一后非线性:树:1:n 图 n:m;逻辑关系:线性。非线性三种数据结构,表栈树图;然后就是存储方式,顺序和链式存储关系:逻辑关系:线性。存储关系:顺序存储,链式存储(内存不连续);顺序表(连续空间)和链表运算关系:crud 排序;逻辑关系:非线性。存储关系:顺序存储,链式存储;顺序表(连续空间)和链表运算关系:crud 排序;逻辑关系:线性存储关系:顺序存储,链式存储;
makefile变量使用及其条件判断
【Makefile 变量使用】在 Makefile 编程中,变量扮演着至关重要的角色,它们可以存储文本字符串,类似于 C/C++ 中的宏。
makefile中的变量
本文将深入探讨Makefile中变量的定义、赋值、引用及其特性。#### 变量的定义与赋值在Makefile中,变量是一个名称,类似于C语言中的宏,代表一个文本字符串。
makefile详解 使用变量和函数
Makefile详解 使用变量和函数makefile 是一种自动化build工具,它可以根据依赖关系自动编译和链接源代码。在 Makefile 中,我们可以使用变量和函数来简化编译过程和提高效率。


