Makefile语法学习

Makefile语法学习

ID:63557977

大小:16.82 KB

页数:7页

时间:2021-08-24

Makefile语法学习_第1页
Makefile语法学习_第2页
Makefile语法学习_第3页
Makefile语法学习_第4页
Makefile语法学习_第5页
Makefile语法学习_第6页
Makefile语法学习_第7页
资源描述:

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

1、读书破万卷下笔如有神Makefile语法学习有稍稍在Linux下碰过程序设计的开发者应该会知道,make是用来将程序代码、函式库、头文件及其它资源文件build成最终成果(即:最终的应用程序)的超强力辅助工具。当然了,并不是非得动用到make才能build程序,或许有什么程序设计魔人喜欢什么都自己手动进行;但利用make及其参考档(输入档案)Make巾le将会让整个编译工作轻松许多。若您曾经打包过DebianPackage,那么应该会发现debuan/rule这个档案的语法和Makefile几乎是一模一样,所以学习Make巾le的语

2、法对于DebianPackageMaintainer而言也是一门必要的功课。Makefile语法:以下为Makefile的基本语法,批注:以#开头的即为批注。变量宣告:(有人称之为宏)语法:MACRO=value注意到,在=前后必须加上空白,而变量名称为大小写相异。利用MACRO=来取消该变数。在惯例上,Makefile内部使用的变量名称使用小写;而使用者很可能从命令行自行另外指定数值的变量,像是CFLAGS,则是使用大写。在Makefile中,可利用$(MACRO)或${MACRO}来存取已定义的变量。例:tragets=foo$

3、(targets):common.hgcc-o$(targets)foo.c效果等同:foo:common.hgcc-ofoofoo.c:=语法注意到,make会将整个Makefile展开后,再决定变数的值。也就是说,变量的值将会是整个MacMle中最后被指定的值。例:x=fooy=$(x)barx=xyz#y的值为xyzbar在上例中,y的值将会是xyzbar,而不是foobar。您可以利用:=来避开这个问题。:=表示变量的值决定于它在Make巾le中的位置,而不是整个Makefile展开后最终的值。x:=foo读书破万卷下笔如有

4、神y:=$(x)barx:=xyz#y的值为foobar在上例中,y的值将会是foobar,而不是xyzbar了。?二语法:?二是一个简化的语法:若变量未定义,则替它指定新的值。否则,采用原有的值。例:FOO?=bar若FOO未定义,则FOO=bar;若FOO已定义,则FOO的值维持不变。+=语法:例:CFLAGS=-Wall-gCFLAGS+=-O2此时CFLAGS的值就变成-Wall-g-O2了。define语法:使用define语法的唯一优点是它可以让变量直接使用『断行』。例:definefoouname-aecho$$SHE

5、LLendefall:$(foo)上例可以视同于:foo=uname-a;echo$$SHELLall:$(foo)注意到在上例中使用了$$,让′$'能传到Shell中。在target里另外指定变量的值可以在target里另外指定变量的值。例:foo=abcall:foo=xyzall:echo$(foo)#此时,foo的值为xyz以下的语法提供了和上例相同的功能:all:overridefoo=xyzall:exportfoo=xyzmake也可以存取环境变量。例:all:@echo$(CFLAGS)读书破万卷下笔如有神在上例中,

6、虽然在Makefile里虽然没有指定CFLAGS的值,但make会试图以环境变量来代出CFLAGS的值。可搭配wildcard指令在变量里展开*?[…]等通配符。例:objects=$(wildcard*.o)规则:(Rule)指示make如何进行编译。主要语法:target:dependenciesCommands或target:dependencies;CommandsCommandsRule指示了make如何建立target;及何时要重新建立target。target:所要建立的档案dependencies

7、:相依项目。make会据此决定是否要重新编译target。Commands:建立target的指令。在Makefile里并没有限定Rule的先后顺序。但默认上,make会参考all这个目标项目,并依据它的dependencies来决定要建立哪些项目。若没有all项目,则会采用Makefile里的第一个项目。target:(目标项目)这个项目所要建立的档案,必须以:结尾。例:foo.o:common.hgcc-cfoo.c其中,foo.o是这个项目要建立的档案;common.h是相依性的项目/档案;而gcc-cfoo.c则为要产生这个

8、项目所要执行的指令。make在编译时,若发现target比较新,也就是dependencies者B比target旧,那么将不会重新建立target,如此可以避免不必要的编译动作。若该项目并非档案,则为fake项目。如此一来将不会建立t

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

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

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