欢迎来到天天文库
浏览记录
ID:39970281
大小:335.31 KB
页数:21页
时间:2019-07-16
《linuxc编程基础--mak》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章LinuxC编程基础--makeGNUmake管理项目为什么要使用make?工作量问题:对于拥有多个(上百个)源文件的软件项目,只需编写一次编译过程,而不需要在每次源文件修改后重复输入众多的文件名和编译命令进行编译;效率问题:make能够根据文件的时间戳自动发现更新过的源文件,并通过读入Makefile文件来对更新的源文件进行编译而对其它文件只进行链接操作。2makefilemakefile的格式:目标:欲生成的目标文件,通常是目标文件或可执行文件;依赖项:生成目标需要的文件,多个文件以空格隔开。命令:创建每个目标体时需要运行的命令。可使用续行号()将一个
2、单独的命令行延续成几行。Makefile是make读入的唯一配置文件,其中包含的规则指明make编译哪些文件以及怎样编译这些文件。目标:依赖项列表(Tab缩进)命令makefileMakefile示例Makefile文件1my_app:greeting.omy_app.o2gccmy_app.ogreeting.o-omy_app3greeting.o:functions/greeting.cfunctions/greeting.h4gcc-cfunctions/greeting.c–Ifunctions5my_app.o:my_app.cfunctions/gr
3、eeting.h6gcc–cmy_app.c–IfunctionsMakefile里有什么?1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。2、隐式规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。3、变量的定义。在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。4、文件指示。其包括了三个部
4、分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C中的预编译#if一样;还有就是定义一个多行的命令。5、注释。Makefile中只有行注释,其注释是用“#”字符。make命令make工具的使用格式:make[命令选项][命令参数]通常使用make就可以了,make会按序查找名为GNUmakefile、Makefile和makefile作为编译指导文件;建议使用Makefile。在make命令后面键入目标名即可建立指定的目标;如果不跟目标名则建立Makefil
5、e中定义的第一个目标。make-ffile读入当前目录下的file文件作为Makefile;Make工作原理make做的工作:在执行gcc时会先检查依赖文件是否存在:若不存在就先执行别的规则以生成缺少的依赖文件,最后生成相关的目标文件。如果存在,并不急于执行gcc,而是先比较依赖文件与其对应源文件的时间戳。如果源文件较新的话,就会执行相应的规则来重新生成依赖文件和目标文件。否则就不会执行相应的gcc。Make工作原理1)如果工程没有编译过,那么所有C文件都要编译并被链接。2)如果这个工程的某几个C文件被修改,那么只编译被修改的C文件,并链接目标程序。3)如果这个工
6、程的头文件被改变了,那么需要编译引用了这几个头文件的C文件,并链接目标程序。目标的依赖关系my_appmy_app.ogreeting.omy_app.cfunctionsgreeting.hfunctionsgreeting.cgcc–cmy_app.c–Ifunctionsgcc-cfunctionsgreeting.cgccmy_app.ogreeting.o-omy_appMakefile中的变量变量的主要作用如下:保存文件名列表:作为依赖文件的一些目标文件名出现在可执行文件的规则中,而在这个规则的命令行里同样包含这些文件并传递给gcc做为命令参数。
7、如果使用一个变量来保存所有的目标文件名,则可以方便地加入新的目标文件而且不易出错。保存可执行命令名:如果项目被用在一个非gcc的系统里,则必须将所有出现编译器名的地方改成用新的编译器名。但是如果使用一个变量来代替编译器名,那么只需要改变该变量的值。保存编译器的参数:在很多源代码编译时,gcc需要很长的参数选项,在很多情况下,所有的编译命令使用一组相同的选项,如果把这组选项使用一个变量代表,那么可以把这个变量放在所有引用编译器的地方。当要改变选项的时候,只需改变一次这个变量的内容即可。变量的定义和使用Makefile中的变量是用一个文本串在Makefile中定义的,
8、这个文本串
此文档下载收益归作者所有