`
weitao1026
  • 浏览: 1053877 次
  • 性别: 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

分享到:
评论

相关推荐

    linux make命令

    Makefile 文件可以使用缩写和宏来简化命令的书写,例如: $@ 代表该目标的全名 $* 代表已经删除了后缀的目标名 $代表该目标的第一个相关目标名 使用这些缩写可以使 Makefile 文件更加清晰和简洁。 宏的使用 宏...

    Linux下Makefile文件的编写

    - **调用方式**:在项目目录中直接运行`make`命令即可根据Makefile文件构建目标;若要清理编译产生的文件,则运行`make clean`。 #### Makefile中变量的使用 在复杂的项目中,频繁地书写相同的路径或选项会导致...

    linux下驱动程序模块编程多文件makefile编写示例

    最后,运行`make`命令,Makefile就会根据规则编译所有的源文件,生成`.ko`模块,你可以使用`insmod`或`modprobe`命令将其加载到内核中。 总结来说,编写一个多文件的Linux驱动程序Makefile涉及到设置编译环境变量,...

    GNU Linux Makefile-v3.80.pdf

    - **变量MAKEFILE_LIST**:解释MAKEFILE_LIST变量的作用,它用于列出当前make执行所使用的所有Makefile文件。 - **其他特殊变量**:列举并解释一些在Makefile中常用的特殊变量的功能。 - **makefile文件的重建**:...

    Linux下makefile教程

    Makefile 的书写规则是,首先我们需要一个 Makefile 文件,以告诉 make 命令需要怎么样的去编译和链接程序。Makefile 的基本结构包括目标文件、依赖文件、命令三部分。目标文件是 Makefile 的主要内容,它指定了编译...

    GNUMake使用手册(中译版) .pdf

    此外,Makefile中也可以使用shell命令,这些命令会被make工具直接传递给shell去执行。在复杂的Makefile中,经常需要使用到shell命令来完成一些特定的工作,比如文件的移动、复制、创建等。 总的来说,GNUMake是构建...

    Makefile的书写详解

    【描述】:“一篇详细介绍makefile书写的文章,值得一看” 【标签】:“Linux中makefile的书写” 【内容】:Makefile是Unix/Linux环境下用于自动化构建和编译项目的文本文件,它定义了一系列规则,指示操作系统...

    Makefile经典教程

    Makefile 是 Make 命令的配置文件,告诉 Make 命令如何编译和链接程序。 Makefile 在工程中的作用 Makefile 在工程中的作用是自动化编译过程,提高软件开发的效率。Makefile 定义了一系列的规则来指定哪些文件需要...

    Linux 下的自己动手写makefile资料

    在Makefile中,有几组自动变量用于简化命令书写,如`$@`代表当前目标,`$代表第一个依赖项。 五、Makefile的执行流程 1. `make`会检查目标文件的修改时间,如果比依赖文件新,就不执行命令。 2. 如果目标不存在或者...

    Unix_Linux_编写MakeFile

    Makefile是一个文本文件,包含了构建软件项目的规则和指令,使开发者能够通过简单的命令执行编译、链接等复杂任务。以下是对如何编写Makefile的详细说明: 第一部分、概述 Makefile的主要目的是简化和自动化编译...

    make makefile 的学习资料

    4 Makefile书写命令 4.1 显示命令 `@`符号可以隐藏命令行,但调试时可能希望显示命令。 4.2 命令执行 命令通常以制表符或空格开头,以便make识别。 4.3 命令出错 如果命令返回非零退出状态,make会停止执行并报告...

    linux下的makefile教程

    在Makefile中,可以定义显式规则(explicit rules),显式规则指定了如何将特定的文件从其他文件中创建出来,包括它们依赖的其他文件以及编译它们所需的命令。隐晦规则(implicit rules)则是make预设的规则,它们...

    makefile最好的教程

    Makefile书写命令部分介绍了如何在makefile中书写命令,包括显示命令、命令执行、命令出错处理以及嵌套执行make。了解这些命令对于编写正确和高效的makefile至关重要。 Makefile的工作方式涉及到了如何根据文件的...

    makefile教程(中文版).pdf

    如果工程中的某些文件更新了,make命令会根据依赖关系决定哪些文件需要重新编译。 #### 总结 Makefile是程序构建和维护过程中至关重要的工具。它不仅使得软件的编译过程自动化,还允许开发者自定义编译选项和过程。...

    Linux GNU Makefile中文版手册

    在规则中使用命令 - **命令回显**: - 显示将要执行的命令。 - **执行命令**: - 使用 `$(SHELL)` 调用 shell 来执行命令。 - **并行执行**: - 使用 `-j` 选项来并行执行命令。 - **命令错误**: - Make 会在遇到...

    makefile基础教程

    第3章Makefile介绍部分,讲述了Makefile的基本规则和示例、make命令的工作原理以及Makefile中变量的使用。此外,还探讨了make命令的自动推导功能和另类风格的makefile。 第4章Makefile总述中,解释了Makefile文件的...

    Makefile详解(超级好)

    Makefile是Unix/Linux系统中用于控制软件编译过程的脚本文件,它记录了项目中源文件之间的依赖关系,并规定了如何进行编译和链接,以生成可执行文件。Makefile广泛应用于C和C++的项目中,因为它可以大大简化编译过程...

    makefile编程(pdf)

    第三章详细解释了Makefile的总述,阐述了Makefile包含的内容、命名规则、如何包含其他makefile文件、特殊变量的使用,以及makefile文件的重建和重载。第四章讨论了Makefile的规则,包括规则的语法、依赖类型、文件名...

    makefile中文手册

    《Makefile中文手册》是一份详尽的指南,主要针对Linux环境下的运维人员和开发者,旨在帮助他们理解和掌握Make工具的使用。Make是Unix和类Unix系统中的一个自动化构建工具,它通过读取名为Makefile的文件来编译、...

Global site tag (gtag.js) - Google Analytics