- 1、本文档共64页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
makefile写法整理
Makefile基本语法
Makefile:程序模块的内部关系决定了源程序编译和链接的顺序,通过建立makefile可以描述模块间的相互依赖关系。Make命令从中读取这些信息,然后根据这些信息对程序进行管理和维护。在makefile里主要提供的是有关目标文件(即target)与依靠文件(即dependencyies)之间的关系,还指明了用什么命令生成和更新目标文件。有了这些信息,make会处理磁盘上的文件,如果目的文件的时间标志(该文件生成或被改动进的时间)比任意一个依靠文件旧,make就执行相应的命令,以便更新目的文件(目的文件不一定是最后的可执行文件,它可以是任何一个文件)。
1)makefile的基本单位是“规则”,即描述一个目标所依赖的文件或模块,并给出其生成和算法语言需要用到的命令。规则的格式如下:
目标[属性]
分隔符号 [依赖文件][命令列]
{tab命令列}
与Linux下面的命令格式相同,[]中的内容表示为可选择项,{}中的内容表示可出现多次。
A. 目标:目标文件列表,即要维护的文件列表。
B. 属性:表示该文件的属性。
C. 分隔符:用来分割目标文件和依赖文件的符号,如冒号“:”等。
D. 依赖文件:目标文件所依赖的文件的列表。
E. 命令列:重新生成目标文件的命令,可以有多条命令。
注意:在makefile中,除了第一条命令,每一个命令行的开头必须是一个tab符号,也就是制表符,而不能因为制表符相当于4个空格而不去键入tab符号。因为make命令是通过每一行的tab符号来识别命令行的。另外,对于第一条命令而言,不必用tab键,就可以直接跟在依赖文件的列表后面。对于注释的了,起头应该用#符号,并用换行符号结束。如果要引用#符号,要用到“”。
2) make命令的使用格式为:
make [选项][宏定义][目标文件]
make命令有多个选项参数,列举参数含义如下:
A. -f:指定需要维护的目标。
B. -i:忽略运行makefile中命令产生的错误,不退出make.
C. -r:忽略内部规则。
D. -s:执行但是不显示所执行的命令。
E. -x:将所有的宏定义都输出到shell环境。
F. -V:列出make的版本号。
选项给出了make命令工作的方式方法,宏定义给出了makefile时所用的宏值,目标文件就是需要更新的文件列表。
3)使用伪目标:make命令的目标可分为实目标和伪目标两种。而有时需要用make命令来做些辅助性的工作,或者对多个文件进行维护。可以通过设置伪目标来实现。
4)指定需要维护的目标:一般make维护的是makefile中的第一个目标文件。但有时用户并不关心最终的目标文件如何。反而关心中间的目标文件。使用目标参数make的执行。
5)makefile变量:makefile里主要包含了一些规则,除此之外就是变量定义,被称为宏定义。Makefile里的变量就像一个环境变量。事实上,环境变量在make过程中可以看成make的变量。这些宏定义是大小写敏感的,一般使用大写字母。它们几乎可以从任何地方被引用,也可以被用来做很多事情,比如:
A.储存一个文件名列表:生成可执行文件的规则包含一些目标文件名作为依赖文件。在这个规则的命令行里,同样的那些文件被输送给gcc做为命令参数。如果在这里使用一个宏来储存所有目标文件名,那么就会很容易加入新的目标文件,而且不易出错。
B.储存可执行文件名:如果程序被用在一个非GCC的系统里,或者想使用一个不同的编译器,就必须将所有使用编译器的地方改成新的编译器名。但是如果使用一个宏来代替编译器名,那么只需要改变一个地方,其他所有地方的命令名就都改变了。
C.储存编译器命令选项:假设想给所有的编译命令传递一组相同的选项(例如-Wall -O -g),如果把这组选项存入一个宏,那么可以把这个宏放在所有调用编译器的地方。而当要改变选项的时候,只需在宏定义的地方改变这个变量的内容。要定义一个宏,只要在一行的开始写下这个宏的名字,后面跟一个“=“和要设定这个变量的值。以后引用这个变量时,写一个$符,后面是括号里的变量名。格式如下:
$(宏名) 或${宏名}
make将$符号作为引用的开始。如果要表示$符号,那么应用$$即可。宏引用还支持多层引用,在处理时按照顺序依次展开。当宏名是单个字符时,可以省略括号,宏定义可以在makefile文件中。
$@:扩展成当前规则的目标文件名
$:扩展成依赖列表中的第一个依赖文件
$^:扩展成整个依赖的文件列表(除掉了里面所有重复的文件名)
$?:表示目标文件中新的依赖文件的列表
$*:是表示依赖文件的文件名,不含扩展名
6)在makefile
您可能关注的文档
- 2014-2015学年安徽省宿州市高一(上)期末数学试卷.doc
- 2014-2015学年广东省珠海市七年级(下)期末数学试卷.doc
- 2014-2015学年湖北省武汉市江岸区八年级(下)期末数学试卷.doc
- 2014-2015学年山东省临沂市相公中学八年级(上)期末数学试卷.doc
- 2014-2015学年浙江省台州市路桥区八年级(下)期末数学试卷.doc
- 2014年广东省广州市中考英语试卷.doc
- 2014年湖南省长沙市中考地理试卷.doc
- 2015-2016学年福建省福州十八中八年级(下)期末数学试卷.doc
- 2015-2016学年福建省莆田市仙游县第三片区九年级(上)期末数学试卷(b卷).doc
- 2015-2016学年广东省东莞市八年级(下)期末数学试卷.doc
- DB15_T 3688-2024 区域性地震安全性评价数据库规范.docx
- DB14_T 3131-2024 放心消费创建指南 街区.docx
- DB35_T 2208-2024 面向视频图像识别的AI边缘计算系统应用技术要求.docx
- 2026高考政治必修2《经济与社会》详细知识汇总(含思维导图).docx
- 2025新修订的《农村基层干部廉洁履行职责规定》专题学习解读党课PPT课件.docx
- DB14_T 3143-2024 经营主体信用风险分类应用规范.docx
- DB33_T 1392-2024 高速公路收费站服务规范.docx
- DB35_T 2209-2024 日用陶瓷生产企业循环利用评估导则.docx
- DB37_T 1354-2023 体育场馆赛事服务通用要求.docx
- DB14_T2536—2022电力企业安全风险分级管控和隐患排查治理双重预防体系规范.docx
文档评论(0)