最近由于要分析Uboot的代码。
于是乎,再一次开始复习《GNU Make中文手册》()
第一次看这本手册是在快一年前的事情了,当时是啥都不懂。一头雾水。
这次细细品味的时候,发现收获颇多。建议初学者去多看看。
今天看到 《4.14 自动产生依赖》的时候,一段代码在一次让我郁闷了。同样的地方,同样的不理解。
今天偶就要好好揭开这个惑!
代码如下:
1 %.d: %.c
2 $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
3 sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
4 rm -f $@.$$$$
其实这里主要是为每个C文件建立一个同名的后缀为.d。该文件的作用是使用gcc的-M属性来自动生成.o文件的头文件依赖关系。
第1,2,4都好理解。
第2行解释: 使用gcc -M 的属性将 $<(第1行的第一个依赖文件,就是%.c。 查看静态模式)的C文件的依赖关系输出到一个临时文件。 这里有点疑惑。 书里面说 .$$$$是当前进程好。 然到Makefile这个脚本将$$$$当成进程号了。姑且这么认为吧。
第4行解释:将第2行产生的临时文件删除。
对于第3行, 我知道sed的s命令是一个替换命令。但是里面的用到了太多高深的匹配规则了。 sed命令果真如传闻中的那么强大,对于现在的我来说还真的很陌生。不管咋样, 要把它解决。
首先,我们先要知道sed是什么概念。
sed是一个非交互式的流编辑器。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而流编辑器是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕,接着读入下一行。
为了简化的阐述,下面将静态模式用一个特例代替---main.c 。 通过第2行,针对main.c编译器生成了如下的依赖关系:
main.o:main.c defs.h
而通过第三行将会被替换成main.o:main.d:main.c defs.h, 并且把这个依赖关系输出到文件main.d中。
OK,大致知道了它的意思,接下在,就细细的分析第三行命令的整个执行过程,如下:
1:将($@.$$$$)的临时文件中的字符串信息(main.o:main.c defs.h)通过 “<” 输送到sed命令中.
2:sed中的s符号告诉sed命令,这次要做一个替换的任务。s符号的格式为:[address[,address]] s/pattern-to-find/replacement-pattern/[g p w n]。 下面来匹配上面的示例:
[address[,address]]:是指要处理的行的范围,在这次的操作中采用的是默认值。
pattern-to-find等价于\($*\)\.o[ :]*
replacement-pattern等价于\1.o $@ :
3:Makefile使用%=main进行替换后,命令变成了sed 's,\(main\)\.o[ :]*,\1.o main.d : ,g' < main.pid > main.d ;
接下来就比较好分析了,主要是正则表达式的知识了。 pattern-to-find使用到了4个正则表示式的知识点。
first, \(main\)为创建一个字符标签,给后边的replacement-pattern使用。如\1.o,展开后就是main.o
second, \. 在正则表达式中‘.’作用是匹配一个字符。所以需要使用转义元字符‘\’来转义。
third, [ :] 匹配一组字符里的任意字符 。
forth, *匹配0个或多个前一字符
4 : 通过sed的正则表达式,输入的main.o:main.c defs.h被替换成了main.o main.d : main.c defs.h。
这里还有个有趣的东西,平时我们对命令s符号使用‘/’作为参数分割符,其实‘/’只是一种默认的习惯罢了。你也可以使用','来作为分割符号,只要前后统一就OK。这里就是使用了','来作为分割符。
以上是个人的理解, 在一个复习了一下正则表达式与sed, 感觉挺好。学到了不少东西。
参考了如下网站资料:
http://blogold.chinaunix.net/u/29916/showart_2096163.html
学海无涯, 继续努力!
分享到:
相关推荐
GNU make中文手册 GNU make中文手册 GNU make中文手册
GNU make中文手册.pdf GNU make中文手册.pdf
GNU make中文手册.pdfGNU make中文手册.pdfGNU make中文手册.pdfGNU make中文手册.pdfGNU make中文手册.pdfGNU make中文手册.pdfGNU make中文手册.pdfGNU make中文手册.pdfGNU make中文手册.pdfGNU make中文手册.pdf
GNU Make中文手册 全面介绍make文件的文档 pdf 3.85
系统、详细讲述make的中文资料比较少,出于对广大中文Linuxer的支持,本人在工作之余,花了18个多月时间完成对“info make”的翻译整理,完成这个中文版手册。本书不是一个纯粹的语言翻译版本,其中对GNU make的一些...
GNU make 中文手册详细介绍makefile书写规范及工程管理
Gnu make 中文 手册 Gnu make 中文 手册 Gnu make 中文 手册 Gnu make 中文 手册 Gnu make 中文 手册
Gnu Make 使用手册
GNUMake使用手册(中译版) 让初学者掌握makefile命令的书写规范。
GNU Make 中文手册 Ver3.8
GNU_Make中文手册 LINUX 徐海兵
GNU make使用手册 中文 原版英文中译版