欢迎来到天天文库
浏览记录
ID:38982173
大小:101.51 KB
页数:17页
时间:2019-06-22
《Linux下Makefile简单教程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、目录一:Makefile基本规则1.1示例1.2隐式规则1.3伪目标1.4搜索源文件二:变量2.1使用变量定义变量值2.2追加变量三:条件判断四:函数Linux下Makefile总结——一步MakeFile可以看做是一种简单的编程语言,其诞生的本质目的是实现自动化编译。以Linux下gcc-c编译器为例,编译一个c语言程序需要经过以下几个步骤:1.将c语言源程序预处理,生成.i文件;2.预处理后的.i语言编译成汇编语言,生成.s文件;3.汇编语言经过汇编,生成目标文件.o文件;4.将各个模块的.o文件链接起来,生成一个可执行程序文件。我们知道,在VisualC++
2、6.0中,可以新建一个工程,在一个工程当中能够包含若干个c语言文件,则编译的时候直接编译整个工程便可。Linux下无法为多个c语言文件新建工程,但可以通过MakeFile实现它们的整合编译。如上gcc-c编译步骤,如果使用Makefile则过程为:.C文件——>.o文件——>可执行文件当然,Makefile中也加入了自己的设置变量方法与集成了一些函数,能够更有效地方便用户使用。/**************************分隔符********************************/一:Makefile基本规则1.1示例target...:pre
3、requisites...command......target也就是一个目标文件,可以是ObjectFile,也可以是执行文件。prerequisites就是,要生成那个target所需要的文件或是目标。command也就是make需要执行的命令。(任意的Shell命令)为了方便理解,我们来看一个示例:/*Makefile示例*/edit:main.okbd.ocommand.odisplay.o/insert.osearch.ofiles.outils.ogcc-oeditmain.okbd.ocommand.odisplay.o/insert.osearch
4、.ofiles.outils.omain.o:main.cdefs.h#生成main.ogcc-cmain.ckbd.o:kbd.cdefs.hcommand.h#生成kdb.ogcc-ckbd.ccommand.o:command.cdefs.hcommand.h#生成command.ogcc-ccommand.cdisplay.o:display.cdefs.hbuffer.h#生成display.ogcc-cdisplay.cinsert.o:insert.cdefs.hbuffer.h#生成insert.ogcc-cinsert.csearch.o:sea
5、rch.cdefs.hbuffer.h#生成search.ogcc-csearch.cfiles.o:files.cdefs.hbuffer.hcommand.h#生成files.ogcc-cfiles.cutils.o:utils.cdefs.h#生成utils.ogcc-cutils.cclean:rmeditmain.okbd.ocommand.odisplay.o/insert.osearch.ofiles.outils.o/*END*/执行输入:make-sedit反斜杠(/)是换行符的意思。我们来回忆一下一个c语言编译的过程:c语言文件:main.c1
6、.gccmain.c-cmain.o2.gccmain.o-omain经过这两步便可以编译出可执行文件:main。现在我们再看上面的Makefile:main.o:main.cdefs.h#生成main.ogcc-cmain.c这两句便生成main.o文件(main.c与defs.h为用到的源文件)。之后edit:main.o...gcc-oeditmain.o...便会生成main可执行文件;同理,其他几个文件亦是。“edit”便是最终编译出的可执行文件名。可以看到Makefile只是整合了编译过程,也可以同时编译多个文件,其诞生的本质目的确实是为了实现自动化编
7、译。1.2隐式规则make工具会自动使用gcc-c命令,将一个扩展名为.c的c语言程序源文件编译成一个同名的.o目标文件。因此,在上例中,将:main.o:main.cdefs.h#生成main.ogcc-cmain.c改为:main.o:defs.h(即去掉源同名c语言文件名,其他几个文件亦是如此。)这样便使用了隐式规则,隐式规则只是节省了敲代码的数量。1.3伪目标可以注意到上述示例中末尾有几行代码:clean:rmeditmain.okbd.ocommand.odisplay.o/insert.osearch.ofiles.outils.o这几行代码并不会编译
8、生成文件,
此文档下载收益归作者所有