`
weitao1026
  • 浏览: 992094 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

linux中make命令的简单使用以及Makefile文件的书写

 
阅读更多

Makefile

   

    会不会写makele,从一个侧面说明了一个是否具备完成大型工程的能力。

    一个工程中的源件不计数,其按类型、功能、模块分别放在若干个目录中,makele定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makele就像一个Shell脚本一样,其中也可以执行操作系统的命令。makele带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make是一个命令工具,是一个解释makele中指令的命令工具,makele成为了一种在工程方面的编译方法。

 

一、关于程序的编译和链接

    一般来说,无论是CC++、还是 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:

wKioL1dKnwOA9QS7AAAg5YLxgCU007.png-wh_50

    (注意:如果按格式1写Makefile文件,需要将每行开头处的‘#’删除掉,此为注释符)

    格式2:

wKiom1dKnifSSkrnAAAXESlqQAU392.png-wh_50

 

    运行该文件效果如下:

wKioL1dKn2zBtOSXAAAYvmLWsbQ128.png-wh_50

    清除Makefile产生的多余文件make  clean

wKiom1dKnpuy2SaeAAAZ7XZuTRo612.png-wh_50

    注:   

    1、编写依赖方式时,一定要以Tab键开头(不能用空格代替)

    2、clean一般都放在文件的最后

    3、@可以屏蔽输出依赖方式

    4、makefile 默认值生成一个目标文件,就停止

    

 

   linux下编写一个简单的进度条

 

    进度条实现原理:

1)实现动态的增长

    定义一个数组,并设置一个计数器,当数字增加的同时,给字符数组每次增加一个元素,并且打印时覆盖之前的数组。

2)保证打印信息输出在一行

    每次将光标定位在最左边,从标处打印,使用‘\n’,回车

3)复制动态的效果实现

    定义一个数组

     char *index = -/|\\;

    输出时index[count%4];

4)实现打印长度相同

    %-100s

5)给人复制的效果

    程序每输出一次,程序挂起一段时间

 

     代码如下:

wKiom1dKn_LQ7MphAABwFz0ma6g554.png-wh_50

    

    运行效果如下:

 

wKiom1dKoBiA1p7kAAAkRO48UFA170.png-wh_50

wKiom1dKoBjSnKLhAAAo-QrUwQ0669.png-wh_50

分享到:
评论

相关推荐

    跟我一起写Makefile[陈皓]

    make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样...

    makefile 格式详细说明

    这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是: 1)如果这个工程没有编译过,那么我们的所有C...

    makefile详细规则

    make是一个命令工具,它解释Makefile中的指令(应该说是规则),Makefile中描述了工程中所有文件的编译顺序、规则。Makefile有自己的书写格式、关键字、函数。像C语言有自己的格式、关键字和函数一样。而且在...

    跟我一起写 Makefile 作者:陈皓 整理:祝冬华

    四、makefile中使用变量 (10) 五、让make自动推导 (11) 六、另类风格的makefile (12) 七、清空目标文件的规则 (13) 第四部分、Makefile 总述 (13) 一、Makefile里有什么? (13) 1、显式规则。 (14) 2、隐晦...

    万能makefile写法详解,一步一步写一个实用的makefile

    每个shell命令的进程号通常是不同的,为了每次调用$$时得到的进程号相同,必须把这4行放在一条命令中,这里用分号把它们连接成一条命令(在书写时为了易读,用\拆成了多行),这样每次.$$便是同一个文件了。...

    make手册.pdf

    make命令执行时,需要一个 Makefile 文件,以告诉make命令需要...这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。

    makefile中文手册(200页pdf文档)

    详细介绍makefile的书写, 以及 显示规则,隐含规则,变量定义,指示符和注释的知识

    GNU make 中文手册

    GNU make 中文手册详细介绍makefile书写规范及工程管理

    makefile工程管理学习笔记

    linux下,输入make,会自动执行当前目录下makefile文件/Makefile文件,如果两者均存在,优先执行makefile文件;makefile的书写方式,类似于shell脚本; makefile简单例子:     以linux系统为例,现在有5个文件...

    make入门教程

    makefile文件的书写格式及方法,可以帮助初学者尽快学会makefile文件的书写,可以自己在linux下进行试验!

    GNU make中文手册

    作为一个Linux程序员,make工具的使用以及编写Makefile是必需的。系统、详细讲述make的中文资料比较少,出于对广大中文Linuxer的支持,本人在工作之余,花了18个多月时间完成对“info make”的翻译整理,完成这个...

    跟我一起写Makefile.txt

    1. 概述 2. 关于程序的编译和链接 3. Makefile 介绍 4. Makefile 总述 5. 书写规则 6. 书写命令 7. 使用变量 8. 使用条件判断 9. 使用函数 10. make 的运行 ...12. 使用make更新函数库文件 13. 后序

    apache-ant-1.8.0RC1-bin

    由于采用xml的语法,所以build.xml文件很容易书写和维护,且结构很清晰,而不像Makefile文件有那么多的限制(例如在tab符号前有一个空格的话,命令就不会执行)。Ant的优点远不止这些,它还很容易的集成到一些开发...

    跟我一起写Makefile.pdf

    2.4 makefile 中使用变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5 让 make 自动推导 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....

    手交手写makefile

    makefile书写!

    免费:makefile编程

    3.9 make如何解析makefile文件........................................................................................... 30 3.9.1 变量取值 ..............................................................

    Makefile.pdf

    四、 makefile中使用变量....................................................................................................10 五、让make自动推导...........................................................

    GNU Make中文手册

    本文比较完整的讲述GNU make工具,涵盖GNU make的用法、语法。同时重点讨论如何为一个工程编写Makefile. 阅读本书之前,应该对GNU的工具链和Linux的常用工具有一定了解。诸如:gcc、as、ar、ld、yacc等。在书写...

Global site tag (gtag.js) - Google Analytics