Linux复习篇(二)--makefile文件及make命令

什么是makefile文件?

介绍一下make命令,make命令是GNU的工程化编译工具,它用于编译大量互相关联的源代码,使用它可以实现项目的工程化管理,提高开发效率。那么对于一个项目,该如何让它按照我们预想的规则去编译链接执行呢?这就要用到我们要学习的Makefile了。Makefile的作用就是在执行make命令的时候指定编译和链接的规则,包括源代码文件之间的链接关系、依赖关系等。它关系到整个项目工程的编译规则:哪些文件需要先编译,哪些要后编译,哪些需要重新编译等复杂的操作。Makefile文件就像shell脚本一样,在其中也可以执行操作系统的命令。

为什么要用makefile文件呢?

对于程序的编译,无论是哪种编译器,首先都需要将源代码文件编译成中间代码(linux下 .o文件),然后再将大量的.o文件链接在一起进行执行。链接时,目标文件(linux .o文件)主要是链接函数与全局变量,链接器不用管函数在哪一个源文件当中,它关心的是函数所在的中间目标文件。大多数情况下,编译生成的中间目标文件比较多,在链接时需要明确地指出中间目标名,这对于编译很不方便,解决方法是给中间目标文件打包生成一个库文件,主要解决增加链接其他目标文件的效率(管理工程,自动化编译)

makefile文件编写规则:

例如将 main.c  add.c  max.c生成makefile文件

all:main    //最终要生成的程序的名字

main:main.o add.o  max.o  //依赖关系
Table键  gcc -o main.o  add.o  max.o  //生成规则,main由main.o 等.o文件生成

main.o : main.c      //同上依赖关系
Table键  gcc -c main.c    //同上。生成规则

.......   //以下省略其他.o文件的生成规则

clean :自设命令  //可省略,调用需主动执行(make clean)

make命令:

我们只要在makefile文件编写好之后执行make命令,make命令是根据Makefile文件定义的规则去编译执行的,所以Makefile的书写就规定了程序的执行方式。

make执行上图代码的工作顺序:

  • make首先会在当前目录下查找名称为“Makefile”或者“makefile”的文件。
  • 找到文件之后,它会继续找文件中注明的第一个目标文件(即上文main),并把这个文件作为最终需要生产的目标文件。
  • 如果目标文件(main)不存在,或者目标文件后的依赖文件(.o文件)的修改时间要比目标文件(main)新,那么,它继续寻找后面定义的命令。
  • 如果proc依赖的.o文件存在,那么make会在当前文件中寻找目标为.o文件的依赖性。若找到则根据规则继续生成一个头文件。
  • make会根据文件夹内的.c或者.h生成.o文件,然后再用.o文件生成main可执行程序。

make命令使用的总结:

  • make是根据依赖性一步步地完成最终文件的生成,依赖寻找成功,生成相应的头文件。
  • 若在此过程中遇到错误,如果是依赖文件未找到或者编写规则错误,则make直接报错并终止。如果是定义的命令不对,make并不会报错,即make只会检查文件依赖,不会对命令进行检查。
  • 从上面的Makefile还可以看到最后一行有一个clean命令,但是它没有依赖关系,只有相关的执行命令。那么在执行make时,它就不会自动执行。如果需要执行clean,则需要指定它的执行:make clean
  • 如果该工程已经编译过一次了,当对其中某个源文件修改后,只会根据依赖性进行相关文件的重新编译,而不会整个工程都重新编译。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值