Linux环境基础开发工具使用—项目自动化构建工具-make/Makefile

Linux环境基础开发工具使用—项目自动化构建工具-make/Makefile

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Linux的学习】
📝📝本篇内容:make和makefile的背景以及使用和原理
作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-

1.背景

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
make是一条命令,makefile(Makefile也可以)是一个文件,两个搭配使用,完成项目自动化构建。

2.使用和原理

在这里插入图片描述
在这里插入图片描述大家现在看到上面一个图肯定是蒙的,首先我们要知道make和makefile是一对搭档,他们两要组合使用。
我们先解释一下makefile里面的内容,第一行其实是一对依赖关系,test依赖test.c,可以这样理解,想要生成test就必须要有test.c,下一行是依赖方法,就是他们之间是以什么样的一种方式来依赖的,可以理解为怎么依靠test.c来生成test,这就是普通的一条命令。
在这里插入图片描述
其实大家可以借助这个来理解一下依赖关系。
1.在默认模式下,我们输入make命令,make会在当前目录下找名字为“Makefile”或“makefile”的文件。
2.如果找到,它会找文件中第一个目标文件,并把这个文件作为最终的目标文件,也就是上图中test文件
3.如果test文件不存在,或是test所依赖的后面test.o文件的文件修改时间要比test这个文件要新,那么它就会执行后面的所定义的命令(依赖方法)来生成test文件
4.如果test所依赖的test.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则根据他所对应的依赖方法生成hello.o文件
5. make会生成test.o文件,然后再用test.o文件声明make的终极任务,也就是生成test文件的依赖方法。上图中上面的文件
test ,它依赖 test.o
test.o, 它依赖test.s
test.s ,它依赖 test.i
test.i , 它依赖 test.c
6.这就是整个makefile的依赖性,make会一层一层地去找文件的依赖关系,直到最后编译出第一个目标文件
7.在找寻过程中,如果出现错误,那么make就会直接退出,并报错
8.makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译工具

接下来继续解释上面的那个图
在这里插入图片描述
首先要注意一下,每个依赖方法前面都是有tab键空出来的,语法就是这样。
在依赖关系中目标文件对应的依赖文件列表可以是空,因此clean它并没有所对应的被依赖文件,clean是用来做项目清理的。
但问题又来了,为什么他不会和第一个目标文件一起执行呢?
因为没有被第一个目标文件直接或间接关联的,那么它后面所定义的命令将不会自动执行。因此想要执行clean时需要输命令make clean来执行
在这里插入图片描述
一般我们这种clean的目标文件,我们将它设置为伪目标,用.PHONY来修饰,伪目标的特性是总是被执行。
什么叫总是被执行呢?
在这里插入图片描述
见上图,clean被.PHONY修饰后可以一直执行,但test并不是,而是报出is up to date。因为make认为此时的test是最新的,并不需要重新执行,因为在一个很大的项目中,如果文件已经是最新的了还重复执行,会消耗大量的时间。
问题又来了,make是怎么判断是否需要重新执行呢,也就是它怎么判断test是最新的呢?
通过对比时间来进行
在这里插入图片描述
前面其实讲过,当test文件不存在,或者test文件所依赖的后面的文件test.c的修改时间要比test这个文件新,那就会重新生成。
使用touch命令可以修改文件修改时间
在这里插入图片描述
使用stat可以更加详细地查看修改时间等信息
在这里插入图片描述

🌸🌸make、makefile的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

轩情吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值