文章目录
- 一、make/Makefile
- 二、快速查看
- (1)建立Makefile文件
- (2)编辑Makefile文件
- (3)解释
- (4)效果展示
- 三、背后的基本知识、原理
- (1)如何清理对应的临时文件呢?包括可执行。
- (2)单独、反复make发现的现象
- (3)为什么我们在编译的时候,make和Makefile总是不让重新编译我们的代码?
- (4)make和Makefile是怎么做到识别新旧文件的?
- (5)文件的ACM时间
- 什么是ACM时间
- 观察ACM时间的变化
- 直接更新Modify时间,再make,什么现象?
- (6)结论:
- (7)make、Makefile是具有依赖性的推导能力的
- 四、Makefile语法补充细节
- (1)make时不回显命令的具体执行过程:
- (2)Makefile中依赖方法有多个时,利用回车键
- (3)Makefile中注释用#
- (4)Makefile是支持变量替换的
- (5)Makefile支持依赖关系的简写
- (6)常规用法(期待我们写出的格式)
一、make/Makefile
make是一个命令。
Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。
🎗️会不会写Makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
🎗️一个工程中的源文件数不胜数,其按照类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。
🎗️Makefile带来的好处就是自动化编译。一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
🎗️make是一个命令,是一个解释Makefile中指令的命令工具。一般来说,大多数的IDE都有这个命令,可见,Makefile都成为了一种在工程方面的编译方法。
🎗️make是一个命令,Makefile是一个文件,两个项目搭配使用,完成项目自动化构建。
二、快速查看
(1)建立Makefile文件
🎗️命令:
touch Makefile
(2)编辑Makefile文件
🎗️命令:
vim Makefile
(3)解释
🎗️make 会在当前的Makefile中扫描文件,找到源文件,执行目标文件形成时所对应的方法。
🎗️现实中,依赖关系+依赖方法=描述清楚一件事情的原因和做法,能达到我们的目标。
比如说,依赖关系是老爸,我是你儿子;依赖方法是给我打钱。
(4)效果展示
三、背后的基本知识、原理
(1)如何清理对应的临时文件呢?包括可执行。
🎗️代码
🎗️解读:
注意:
目标文件(包括伪目标)可以没有依赖关系。
🎗️清理项目的代码
make clean
(2)单独、反复make发现的现象
1.单独make默认从上到下扫描Makefile时,形成从上到下遇到的第一个伪目标文件。一般,清理工作写在最后。
2.不能对同一个文件重复make,因为Makefile默认在编译代码时能够自动识别出文件的新旧。
🎗️用PHONY修饰的目标文件,其实和正常的一般的文件无差别。
🎗️PHONY核心特点:总是被执行的
在一些特殊情况下,比如文件刚被编译过且没修改里面的内容,在make该文件时,第一次会被执行,后面再进行make就不执行该文件的依赖方法了。但是加上PHONY,它每make一次,就会被执行一次。
(3)为什么我们在编译的时候,make和Makefile总是不让重新编译我们的代码?
提高编译效率(如果有成千上万个文件中,里面只有几个文件被修改,那么重新编译这几个就可以了,没有更改的文件不需要编译)
(4)make和Makefile是怎么做到识别新旧文件的?
🎗️对比源文件的修改时间和可执行文件的修改时间
(5)文件的ACM时间
stat命令查看文件属性
用法:stat 文件名
什么是ACM时间
文件=内容+属性
文件的一切时间与内容、属性有关
🎗️Access时间:该文件的最近访问时间(例如:cat、vim、cd目录…)
🎗️Modify时间:对文件内容的最近修改时间
🎗️Change时间:对文件属性的最近修改时间
Change时间可能更改,就自己更改一下。
Modify时间可能更改,会和Change时间或者其他时间联动更改。
观察ACM时间的变化
🎗️Access的时间被更改为当前时间
在实际操作中,发现Change的时间也被更改,原因是Access时间也是文件的属性,发生变化时,Change时间也变化。
touch -a code.c
🎗️Modify时间被更改为当前时间
同时该操作也会伴随着Change时间变化
touch -m code.c
直接更新Modify时间,再make,什么现象?
直接更新Modify时间,是源文件的修改时间>可执行文件的修改时间,再make一下,就可被重新编译,形成一个新的可执行文件!
(6)结论:
🎗️1.通过时间对比,可以做到不让有些代码进行重编译
🎗️2.伪目标总是被执行的!他的依赖方法总是会被执行,不会被任何情况拦截。
(7)make、Makefile是具有依赖性的推导能力的
四、Makefile语法补充细节
(1)make时不回显命令的具体执行过程:
🎗️在Makefile文件中具体的操作命令前加@
(2)Makefile中依赖方法有多个时,利用回车键
(3)Makefile中注释用#
(4)Makefile是支持变量替换的
(5)Makefile支持依赖关系的简写
🎗️Makefile文件:
🎗️执行结果:
(6)常规用法(期待我们写出的格式)
以上内容就分享到这里啦!如果对友友们有帮助的话,记得点赞收藏博客,关注后续的内容创作哦