2.Makefile

本文详细介绍了Makefile的基本概念、工作原理,包括文件命名规则、创建与使用、依赖检测、更新检查、变量优化、通配符应用和清理中间文件。通过实例演示了如何编写高效Makefile,并讨论了其在软件开发中的重要性。
摘要由CSDN通过智能技术生成

1.Makefile

1.1 什么是 Makefile

一个工程中有很多文件,文件之间都是相辅相成有着编译的先后顺序,但是如果自己手动根据编译顺序编译文件造成速度非常慢。Makefile 是”自动化编译“,只需一个 make 指令系统就会根据编译顺序帮自己编译文件

1.2 Makefile 文件命名规则

image-20211101115607605

1.3 代码演示

1.生成一个 Makefile 文件

vim Makefile

2.将执行规则书写入 Makefile

image-20211101121336569

3.使用 make 编译 Makefile 文件

sudo apt install make // 安装 make 
make // 在 Makefile 所在文件夹执行指令

可以看到下图中输出了 Makefile 中的相关指令,与此同时在对应的文件下生成的 app 可执行文件

image-20211101121539005

4.执行 app 可执行文件

./app

这个 Makefile 是 make 默认执行的文件,如果不想叫 Makefile 也可以自定义名称,那么在 make 时后面就要拼接相应的文件名称。比如新建的 Makefile 替代文件是 abc

make abc

1.4 Makefile 的工作原理

image-20211101144442018

1.命令执行之前,检查规则中的依赖是否存在

当发现前面的命令找不到时 Makefile 文件会顺着继续向下查找后面的目标有没有有关生成前面相关文件的,如下图,一开始是没有 add.o 文件的,但是 makefile 文件会继续向下查找有没有生成 .o 的文件指令

Makefile 的指令都是为第一条指令服务的

image-20211101143607539

2.检测更新

Makefile 会对文件进行检测,比如使用 make 编译过 Makefile 文件的情况下,再使用 make 编译 Makefile 文件,就发现提示

image-20211101162023622

这是因为 make 是检查更新的,如果其中的文件没有更改,则就不会执行 Makefile 中的指令

1.5 Makefile 的优化

下面就要对下图的这些定义进行优化。优化一共分为三个步骤:使用变量将长字符串代替;使用通配符将重复的后缀代替;使用查找替换将长字符串中的后缀名进行查找替换

image-20211101143607539

1.使用变量进行优化

如上图所示可以使用变量代替一个长的字符串

image-20211101150106817

重新定义 Makefile 文件使用变量形式将长字符串进行取代

在最开头定义了两个变量 : src 和 target 并为其赋值。在后面使用 $(变量名) 的方法得到该变量的值。这样长字符串就在前面被定义了

image-20211101151125890

2.使用通配符简化命令代码

在文件中有很多 .c ;.o 的文件,% 可以理解为是 * 的操作;%.o 类似于 *.o这样的话会将所有的 .o 文件生成 .c 文件

image-20211101151440792 image-20211101152933807

3.使用“查找替换”将所有文件名替换

查找:

在自定义变量中定义了可以进行通配的文件名,下面对这些文件名进行替换

示例的意思是将本路径所有 *.c 和 sub 文件下的 *.c 文件名查找出来

image-20211101153710078

替换:

image-20211101154009105

查找到 text 中的单词 patten 并用 replacement 进行替换

image-20211101160206121

最后 make 执行的结果

image-20211101154752330

1.6 中间文件的清除

从 .c 文件到 app 可执行文件生成过程中产生大量 .o 的中间文件,下面使用 clean 的方法将中间过程的 .o 文件进行删除。同样是在 Makefile 中进行定义

image-20211101160933915

执行下面的指令就可以进行 clean 操作

image-20211101161118123

对 clean 操作生成伪目标

指示 clean 是一个假的定义操作。真的定义操作利用了自定义 Makefile 的方法定义的

.PHONY:clean 
image-20211101161435904
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值