1.自动化构建工具
1.1make makefile
这两个就是自动化项目构建
make是命令
makefile是一个文件的名字
1.2见一见make/makefile

这里面是makefile里面写的内容,具体的含义我后面会说,接下来看它的运行

输入make之后他就会自己编译,现在已经编译成功了

我们可以运行这个程序

这是运行的结果,我们上面说的就是自动化构建工具'
1.3依赖关系,依赖方法

这个就是依赖关系

这个就是依赖方法
1.4为什么要有依赖关系和依赖方法
依赖关系的本质:一个程序不可能自己实现所有的功能,必须要复用别人已经写好的功能
依赖方法:因为手动处理依赖几乎不太可能完成
2.makefile语法
我们也可以把一个程序的编译过程都给写下来

这串代码就是表示生成了程序运行的所有代码
-c
-s
-e这些都是为了告诉编译器到这一步停下来
这串代码的含义是:
要想生成exe就必须要有.o
然后向下要想有.o就必须要有.s
依次往下推理

这是运行的结果

此时生成了这些文件
这一步可以看作是函数递归
3.清理
在VS中我们代码有时候无法运行就必须要进行清理,在linux中也是一样的我么也需要清理

具体的语法我们下面会讲

这就是运行的结果和上面的好像没啥差别

make要是运行第一条命令,及其全部的规则
写make clean才是运行这一条命令
4.完成构建与清理
我们在上面写的
.PHONY:------>声明一个符号作为伪目标
细节1:这个依赖关系必须有但是可为空

就比如这里:后面啥都没有这里就是依赖关系为空
为什么这里依赖关系可以为空
因为这是一个命令,他并不是一个文件,他是一个命令
细节2:依赖方法可以是任意的shell命令
细节3:clean本质是删除不需要的临时文件
细节4:make后面跟谁就解析谁,就比如咱们上面的clean那些,如果不跟,就默认执行第一条命令
5.反复和不反复执行
此时我们已经有了exe文件

我们在执行一次make看看效果

无法执行
但是执行clean?

可以被反复执行
这就是.PHONY的特性
他是可以被反复执行的
我们通常的可执行程序不用它,因为不用反复执行,当源文件发生改变的时候才会重新编码
6.时间问题

如图我们主要看前三个时间,其中M这个时间是关键
我们上面说了反复与不反复执行的问题,那么是如何判断的呢?
主要看三点:1.源文件是否被修改
2.源文件和可执行文件谁更新
3.两个文件的修改时间
M时间主要看文件的内容有没有改变
C主要看属性
那么为什么内容一旦改变,MC都会改变呢?
因为内容的改变会影响文件的大小,这些都是属性,所以会跟着改变
acces这个时间表示的是文件被访问的时间
但是这个时间一访问就改变的话就有点离谱,所以编译器设置了当访问多少次之后才会修改这个时间,用来提升效率
7.额外的命令

我们可以看到每一次执行命令,都会回显,这样不太好
那么我们就可以在句子的前面加上@

此时我们在运行一下

就不会再显示了
8.代替命令
再实际的运行中,我们要是想修改目标对象,我们要每一个地方都进行修改,这样很麻烦,C语言中有宏替换的概念,所以Linux中也是有的

BIN SRC是两个名字,这样替换就可以方便许多

这也没为啥,就是这样规定的

@表示目标也就是exe
^表示所有依赖也就是.c
9.linux也给我们提供了多文件统一编译的功能
我们首先在这个文件夹里面有这么多的文件

前六行都是改变一下变量名字
第八行是进行连接
第九行是$@的意思是目标也就是exe
后面的,因为有多个文件这句话的意思是,这是多个依赖,一个依赖也可以使用
第十行是为了显示修改的过程,就是告诉我们用的
第十一行:
就是把以.c文件的编译为.o文件的
^<这两个都是依赖,但是^一般用来多文件<一般用来单文件,二者用法是一样的
17行就是清理

make运行一下

也就是这种情况结束了