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

也就是这种情况结束了

相关推荐
菜_小_白2 小时前
codex
linux·vscode·ai
程序员老赵2 小时前
Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
运维·前端·后端
zhangrelay2 小时前
用ROS2Lyrical实验报告册思路重做蓝桥云课ROS1实验并改进
linux·笔记·学习·ubuntu·机器人
林兴洋2 小时前
linux-mtr命令-ping和traceroute的能力合二为一
linux
cws2004012 小时前
监控摄像头选型指南
运维·网络·监控
变量探索SEQVEC2 小时前
一个网段里 10 个 IP,其实是同一个人:13 天蜜罐日志的攻击者画像
服务器
协皓家具2 小时前
2026年广州岛台吧台椅厂家有啥新变化
大数据·运维·python·devops
OsDepK2 小时前
OSMDE_v1.9.0已加入FTP与shell功能
linux·运维·服务器
和裕3 小时前
定制纸箱刀模费全解析:费用定义与可减免合作场景
大数据·运维·网络·人工智能·算法