makefil

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运行一下

也就是这种情况结束了

相关推荐
程序员清风1 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
readhere2 小时前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI3 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
yyuuuzz3 小时前
跨境站点日志时区混乱的排查记录
运维·服务器·网络·云计算·aws·1024程序员节
‎ദ്ദിᵔ.˛.ᵔ₎3 小时前
关于Linux 线程局部存储的认识
linux·运维
GlobalInfo3 小时前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
数字新视界5 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
隔窗听雨眠5 小时前
KingbaseES平替全链路实践:从迁移评估到可持续运维
运维
skywalk81635 小时前
登到192.168.1.5那台机器,看看今天白天,大约从早晨到晚上,都卡住了。看看因为什么卡住,为什么卡住而没有杀死那个导致卡死的进程,为什么
运维·系统·freebsd
运维行者_5 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php