Makefile系列基础(二)

填坑系列,第二篇
上次简单介绍到Makefile是什么,好处和场景以及怎么用,Makefile系列基础(一),之前说到用make命令来执行Makefile中我们所写下的程序执行规则,所以本章将具体说明如何写Makefile以及如何运用。

以下内容若有概念错误请立马告知,基础概念是立足之本,感激不尽。尽量用通俗易懂的方法将概念写明白,创作不易,产量不高,实属不易,欢迎各位共同交流解答。

首先Makefile核心本质
其次Makefile基本框架
最后make命令是如何运行的

Makefile核心本质

Makefile的本质就一句话:文件依赖性
举个具体的例子来说明下这种依赖性如何体现在程序中,我们平时在WIN系统下的集成IDE编写程序,最后所生成的执行程序其实就是建立在所有.c和.h的源文件下。如果某一源文件出错,则会导致最后执行程序不会执行,以及可能IDE会报错。
在这里插入图片描述

Makefile基本框架

上面说到文件依赖性,Makefile的基本框架就淋漓尽致的体现了什么叫做文件依赖性。

target : prerequisites
[tab]commod

所有的Makefile文件都由这基本框架组成,所谓万变不离其宗。这只是其中的一小部分,还可以是以下结构

target : prerequisites
[tab]commod
...
target : prerequisites
[tab]commod
...
target : prerequisites
[tab]commod

target依赖于prerequisites,具体如何依赖就靠commod命令,这就是在此之前说的,这些文件如何编译需要我们自己来选择,按照我们自己的想法执行。
target就是所说的目标文件,注意目标文件可以是.obj/.o之类的中间文件,也可以是执行文件或者Lable标签
prerequisites就是生成target文件所需要的文件,看起来有点拗口,举第一个例子,程序中生成的中间文件(.obj/.o)需要源文件(.c)的支撑

main.o : main.c
	gcc -c main.c

第二个例子,最终执行的文件需要中间文件(.obj/.o)支撑

main : main.o
	gcc -o main main.o

在这其中具体的命令含义将会留到后面继续讲解,真是坑中之坑啊。

那么接下来就用一个完整的源文件来操演Makefile实用
创建源文件
在这里插入图片描述
在这里插入图片描述
创建Makefile
在这里插入图片描述
在这里插入图片描述
使用make执行Makefile
在这里插入图片描述
此时可以看见在执行Makefile文件中的commod命令行,然而commod命令行中执行的顺序却是跟makefile中编写的命令是相反的,这正好符合Makefile的本质:文件依赖性,也正是跟计算机程序执行相同,从预编译到链接。
也就是 目标文件main 依赖于 main.o中间文件
如何将main.o中间文件生成目标文件则是编写者编写commod命令

那么中间文件又是如何生成的
中间文件main.o 依赖于 main.c源文件
如何将main.c源文件生成中间文件则是编写者编写commod命令

这很明显的是属于一层层的递进嵌套关系,使用make命令会自行寻找文件中的关系

综上,正是之前在系列基础中所说到的,为什么掌握整个程序底层的运转流程将会对从事程序员的行业的人员会是一个质的提升。因为整个程序是如何执行生成的已经了然于胸。

最后执行生成的目标文件
在这里插入图片描述
打印输出源文件的内容。再来看看在文件夹下又多了哪些文件
在这里插入图片描述
刚好就是在Makefile中不同的目标文件。

make命令是如何运行

在上面完成Makefile文件后,使用了make命令,就多了几个文件(中间文件和执行文件),也提及到make命令会自行寻找文件中的关系。
第一次接触和使用时,基本就是属于使用make命令的默认模式,就是一个简单的make命令。
而执行流程则为
首先,会在当前文件下自动寻找Makefile文件。如果找到Makefile文件,则会在Makefile文件中找到第一个目标文件(也就是上面的main目标文件),并将第一个目标文件作为最终文件,这就是为什么要将最终目标文件放在第一个。
其次,第一个目标文件(也就是上面的main目标文件)所依赖的中间文件也存在(main.o中间文件等),make命令则会继续找到中间文件(main.o中间文件等)所依赖的源文件(main.c等源文件),然后执行生成中间文件的commod命令。
最后,如果第一个目标文件不存在,或者第一个目标文件所依赖的中间文件的修改时间比第一个目标文件新,则会先执行后面的命令(就是由源文件生成目标文件的命令)来生成第一目标文件。

如果将上面文字内容看完,再配上下面的图片,那么就会有更深的理解。

在这里插入图片描述

后序继续填坑…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值