【Linux】-自动化构建工具(make/makefile)

作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee
在这里插入图片描述
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!

文章目录


前言

今天我们来讲讲再Linux中开发必备的一项技能,没有这个技能就不适合大型项目的开发,虽然后来这个功能会有专门的工具生成,但是我们要明白他的原理才行,就好比我们以后学了STL,但是也要学习底层原理,才能孰能生巧,今天讲的知识点就是自动化构建工具make/makefile,接下来我就给大家具体介绍一下吧


make: 是一条指令
makefile: 是一个项目目录下的文件

再我们的vs上我们不管是写一个文件还是多文件的项目,想要使程序跑起来,变成可执行程序,直接快捷键,或者上方按键点一下就行了,那为什么像vs这种开发软件可以直接将多个文件直接编译呢??他的底层肯定也有自动化构建的工具使他能完成这一系列的操作。
那我们的make就相当于快捷键,而makefile相当于把多个源文件打包再一个文件里面,通过make直接编译所有源文件,就不需要一个个gcc进行编译。而且清理生成的文件也可以放在makefile文件里面,实验make去执行。

给大家把模糊概念讲清楚了,接下来我就勇案例具体给大家介绍
在这里插入图片描述
我们创建一个叫make的项目目录,里面写文件,创建一个makefile,目前makefile文件里面是空内容。


接下来先来了解两个概念:依赖关系,依赖方法

有一天你给你爸打电话,说要打钱给我了,依赖关系是父子,依赖方法是打钱,缺少了这个依赖关系,就不会打钱给你了。大家先简单理解一下。

我们再上面说过,程序经过预处理,翻译,汇编,链接,生成下面几个文件,他们直接的依赖关系是什么:

hello.o , 它依赖 hello.s
hello.s , 它依赖 hello.i
hello.i , 它依赖 hello.c

想要编译这些文件或者重新清理文件,传统的方式是:
在这里插入图片描述

现在有了依赖关系和依赖方法,我们可以这样去做编译我们的程序,接下来我们再来编写makefile

在这里插入图片描述
我们退出保存,使用make试试:
在这里插入图片描述
我们对比一下makefile文件里面的内容,看着是从下往下面执行的,但实际从上往下扫描的,当依赖方法找不到对应的文件,就会往下面找,有点像栈的形式,大家试着理解一下,我们每次只需要使用一个make,就可以直接把我们想要的文件都生成了,不需要每个文件运行的时候都需要gcc一下太麻烦了。

对于清理文件:
在这里插入图片描述
在这里插入图片描述
伪目标:

.PHONY:clean//声明clean是伪目标文件

在这里插入图片描述
我们发现一次make之后,就make不行了,提示可执行程序是最新的了,我们来执行一下清理工作看看:

在这里插入图片描述
他可以执行很多次,按这个效果,我们把之前所有的都变成伪目标看看:
在这里插入图片描述
一般的我们只把清理工作弄成伪目标文件,为什么要这么做呢??
我个人理解是清理可以一直呗执行时当心清理不干净,而文件已经时最新编译状态了,就不需要再执行,大家知道伪目标文件就好的。

注意:

在这里插入图片描述
在这里插入图片描述

原因是当只输入make的时候,会优先匹配第一个目标文件进行执行,后面的执行就必须加目标文件名才可以,这一点大家要理解。


makefile怎么知道我的程序是最新状态的
再上面说到过,我们make一次之后再make就不行了,因为普通的目标文件不能总是被执行的,因为最新的可执行文件是最新的,就不能一直被执行,所以我们想要知道make是怎么知道我们的可执行文件是最新的状态,他肯定通过一定的指标去对比才会发现它是最新的

我们使用stat来查看:
在这里插入图片描述
它是通过这三个时间来对比之前的文件判断是否需要去重新执行make指令,我们一起来研究一下这三个时间到底是什么

  1. Access是文件最近的访问时间
  2. Modify是文件内容最近修改的时间
  3. Change是文件属性最近修改的时间

这三者的关系是,当一个文件内容被修改了,那他自然的就会访问了文件,文件的属性也会发生改变,所以有的修改会影响其他的,这个大家要先清楚

多文件案例:
在这里插入图片描述
我们来看看自动化构建是怎么完成的:
在这里插入图片描述
相信大家应该堆自动化构建工具了解差不多了,对于我们学习来说,我今天所讲的大家掌握就足够了,以后到公司开发后,会有自动生成构建化的工具,不需要自己写了,那样就更方便了。

对比vs上的操作:
在这里插入图片描述

vs上的重新生成解决方案就相当于make
清理解决方案就相当于make clean

那我们今天的知识点就先分享到这里了,我们下篇再见
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘柚!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值