Makefile
会不会写makele,从一个侧面说明了一个是否具备完成大型工程的能力。
一个工程中的源件不计数,其按类型、功能、模块分别放在若干个目录中,makele定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makele就像一个Shell脚本一样,其中也可以执行操作系统的命令。makele带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make是一个命令工具,是一个解释makele中指令的命令工具,makele成为了一种在工程方面的编译方法。
一、关于程序的编译和链接
一般来说,无论是C、C++、还是 pas,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。
make命令执行时,需要一个 Makele 文件,以告诉make命令需要怎么样的去编译和链接程序。
Makele的书写规则:
1.如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2.如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3.如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
在定义好依赖关系后,后续的那行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头(make并不管命令是怎么工作的,他只管执行所定义的命令。)。
二、 Make是如何工作
1、make会在当前目录下找名字叫“Makele”或“makele”的文件;
2、如果找到,它会查找文件中的第一个目标文件.o;
3、如果文件不存在,它会根据依赖关系查找.s文件;
4、若.s文件不存在,make会在当前文件中查找.s文件的依赖文件.i;
5、若.i文件不存在,会根据依赖关系查找.c文件,当然.c文件是存在的,于是,make会生成一个.o文件,然后去执行文件。
这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。make只管文件的依赖性,即如果在我找了依赖关系之后,冒号后面的文件还是不在,那么make就不工作啦。
三、清空目标文件的规则
每个Makele中都应该写个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。
一般格式:
.PHONY : clean
clean :
-rm -f 文件
.PHONY意思表示clean是个“伪目标”,而在rm命令前面加了一个小减号的意思就是:也许某些文件出现问题,但不要管,继续做后面的事。当然,clean的规则不要放在文件的开头,不然,就会变成make的默认目标。
例如为创建一个进度条(后边详细讲解)的程序(test.c)编写一个Makefile文件,并在Makefile文件下编辑如下:
格式1:
(注意:如果按格式1写Makefile文件,需要将每行开头处的‘#’删除掉,此为注释符)
格式2:
运行该文件效果如下:
清除Makefile产生的多余文件make clean
注:
1、编写依赖方式时,一定要以Tab键开头(不能用空格代替)
2、clean一般都放在文件的最后
3、@可以屏蔽输出依赖方式
4、makefile 默认值生成一个目标文件,就停止
在linux下编写一个简单的进度条
进度条实现原理:
1)实现动态的增长
定义一个数组,并设置一个计数器,当数字增加的同时,给字符数组每次增加一个元素,并且打印时覆盖之前的数组。
2)保证打印信息输出在一行
每次将光标定位在最左边,从光标处打印,使用‘\n’,回车
3)复制动态的效果实现
定义一个数组
char *index = “-/|\\”;
输出时index[count%4];
4)实现打印长度相同
%-100s
5)给人复制的效果
程序每输出一次,程序挂起一段时间
代码如下:
运行效果如下:
相关推荐
make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样...
这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是: 1)如果这个工程没有编译过,那么我们的所有C...
make是一个命令工具,它解释Makefile中的指令(应该说是规则),Makefile中描述了工程中所有文件的编译顺序、规则。Makefile有自己的书写格式、关键字、函数。像C语言有自己的格式、关键字和函数一样。而且在...
四、makefile中使用变量 (10) 五、让make自动推导 (11) 六、另类风格的makefile (12) 七、清空目标文件的规则 (13) 第四部分、Makefile 总述 (13) 一、Makefile里有什么? (13) 1、显式规则。 (14) 2、隐晦...
每个shell命令的进程号通常是不同的,为了每次调用$$时得到的进程号相同,必须把这4行放在一条命令中,这里用分号把它们连接成一条命令(在书写时为了易读,用\拆成了多行),这样每次.$$便是同一个文件了。...
make命令执行时,需要一个 Makefile 文件,以告诉make命令需要...这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。
详细介绍makefile的书写, 以及 显示规则,隐含规则,变量定义,指示符和注释的知识
GNU make 中文手册详细介绍makefile书写规范及工程管理
linux下,输入make,会自动执行当前目录下makefile文件/Makefile文件,如果两者均存在,优先执行makefile文件;makefile的书写方式,类似于shell脚本; makefile简单例子: 以linux系统为例,现在有5个文件...
makefile文件的书写格式及方法,可以帮助初学者尽快学会makefile文件的书写,可以自己在linux下进行试验!
作为一个Linux程序员,make工具的使用以及编写Makefile是必需的。系统、详细讲述make的中文资料比较少,出于对广大中文Linuxer的支持,本人在工作之余,花了18个多月时间完成对“info make”的翻译整理,完成这个...
1. 概述 2. 关于程序的编译和链接 3. Makefile 介绍 4. Makefile 总述 5. 书写规则 6. 书写命令 7. 使用变量 8. 使用条件判断 9. 使用函数 10. make 的运行 ...12. 使用make更新函数库文件 13. 后序
由于采用xml的语法,所以build.xml文件很容易书写和维护,且结构很清晰,而不像Makefile文件有那么多的限制(例如在tab符号前有一个空格的话,命令就不会执行)。Ant的优点远不止这些,它还很容易的集成到一些开发...
2.4 makefile 中使用变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5 让 make 自动推导 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
makefile书写!
3.9 make如何解析makefile文件........................................................................................... 30 3.9.1 变量取值 ..............................................................
四、 makefile中使用变量....................................................................................................10 五、让make自动推导...........................................................
本文比较完整的讲述GNU make工具,涵盖GNU make的用法、语法。同时重点讨论如何为一个工程编写Makefile. 阅读本书之前,应该对GNU的工具链和Linux的常用工具有一定了解。诸如:gcc、as、ar、ld、yacc等。在书写...