makefile学习笔记

makefile学习笔记

ID:36193864

大小:166.00 KB

页数:18页

时间:2019-05-07

makefile学习笔记_第1页
makefile学习笔记_第2页
makefile学习笔记_第3页
makefile学习笔记_第4页
makefile学习笔记_第5页
资源描述:

《makefile学习笔记》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Makefile学习笔记make–n:显示命令但是不执行。(makeclean-n)。命令行前加@,命令执行的时候不会显示出来。   definerun-yacc yacc$(firstword$^)对引用它所在规则中的第一个依赖文件运行yacc程序。 mvy.tab.c$@yacc程序总是生成一个命名为“y.tab.c”的文件。第二行的命令就是把这个文件名改为规则目标的名字。 endef 这里,“run-yacc”是这个命令包的名字。在“define”和“endef”之间的命令就是命令包的主体。

2、需要说明的是:使用“define”定义的命令包中,命令体中变量和函数的引用不会展开。命令体中所有的内容包括“$”、“(”、“)”等都是变量“run-yacc”的定义。它和c语言中宏的使用方式一样.当需要将一个普通命名的文件作为makefile文件时,需要使用make的“-f”、“--file”或者“--makefile”选项来指定。例如:“make–faltmake”,它的意思是告诉make将文件“altmake”作为makefile文件来解析执行。递归展开式变量(用=定义): CFLAGS=$(

3、include_dirs)-O include_dirs=-Ifoo-Ibar“CFLAGS”会在命令中被展开为“-Ifoo-Ibar-O”。而在“CFLAGS”的定义中使用了其后才定义的变量“include_dirs”直接展开式变量(用:=定义): x:=foo y:=$(x)bar x:=later就等价于: y:=foobar18 x:=later和递归展开式变量不同:此风格变量在定义时就完成了对所引用变量和函数的展开,因此不能实现对其后定义变量的引用。如: CFLAGS:=$(includ

4、e_dirs)-Oinclude_dirs:=-Ifoo–Ibar因为include_dirs在引用的后面定义,所以引用的时候其值为空。变量的替换引用:格式为“$(VAR:A=B) foo:=a.ob.oc.o bar:=$(foo:.o=.c)在这个定义中,变量“bar”的值就为“a.cb.cc.c”。使用变量的替换引用将变量“foo”以空格分开的值中的所有的字的尾字符“o”替换为“c”,其他部分不变。  另外一种引用替换的技术使用功能更强大的“patsubst”函数。它的格式和上面“$(VAR

5、:A=B)”的格式相类似,不过需要在“A”和“B”中需要包含模式字符“%”。这时它和“$(patsubstA,B$(VAR))”所实现功能相同。例如: foo:=a.ob.oc.obar:=$(foo:%.o=%.c)definetwo-linesechofooecho$(bar)endef如果将变量“two-lines”作为命令包执行时,其相当于:two-lines=echofoo;echo$(bar)可以使用“override”在定义时声明变量:这样可以防止变量的值被命令行指定的值替代。例如:

6、overridedefinetwo-linesfoo$(bar)endef例1:bar=foo=$(bar)ifdeffoofrobozz=yeselsefrobozz=noendif18例2:foo=ifdeffoofrobozz=yeselsefrobozz=noendif例1中的结果是:“frobozz=yes”;而例2的结果是:“frobozz=no”。其原因就是在例1中,变量“foo”的定义是“foo=$(bar)”。虽然变量“bar”的值为空,但是“ifdef”判断的结果是真。因此当我

7、们需要判断一个变量的值是否为空的情况时,需要使用“ifeq”(或者“ifneq”)而不是“ifdef”。文本处理函数:1.$(substFROM,TO,TEXT)函数名称:字符串替换函数—subst。函数功能:把字串“TEXT”中的“FROM”字符替换为“TO”。返回值:替换后的新字符串。示例:$(substee,EE,feetonthestreet)替换“feetonthestreet”中的“ee”为“EE”,结果得到字符串“fEEtonthestrEEt”2.$(patsubstPATTERN

8、,REPLACEMENT,TEXT)函数名称:模式替换函数—patsubst。函数功能:搜索“TEXT”中以空格分开的单词,将否符合模式“TATTERN”替换为“REPLACEMENT”函数说明:参数“TEXT”单词之间的多个空格在处理时被合并为一个空格,并忽略前导和结尾空格。示例:$(patsubst%.c,%.o,x.c.cbar.c)把字串“x.c.cbar.c”中以.c结尾的单词替换成以.o结尾的字符。函数的返回结果是“x.c.obar.o”3.$(stripSTRINT)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。