2.Makefile

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

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
### 关于 `.makefile.swm`, `.makefile.swn`, `makefile.swo` 文件的用途 在 Linux 或类 Unix 系统中,当使用 Vim 编辑器打开文件时,如果启用了交换文件功能(默认情况下是启用的),Vim 会创建临时的交换文件来保存编辑过程中的一些状态信息。这些文件通常以 `.swp`, `.swo`, `.swm` 等扩展名命名。 以下是关于 `.makefile.swm`, `.makefile.swn`, 和 `makefile.swo` 这些文件的具体用途: #### 1. **交换文件的作用** - 当用户通过 Vim 打开某个文件(如 `Makefile`)并对其进行修改时,Vim 自动会在同一目录下或者指定位置生成一个对应的交换文件[^3]。 - 交换文件的主要目的是为了防止数据丢失,在以下场景中尤为重要: - 如果系统崩溃或程序意外退出,可以通过恢复机制重新加载未保存的内容。 - 多个用户尝试同时编辑同一个文件时,可以检测冲突并提示警告。 #### 2. **不同后缀的意义** - **`.swp`**: 默认情况下,这是最常见的交换文件后缀,表示该文件正在被某位用户编辑。 - **`.swo`**, **`.swm`**: 如果当前目录已经存在同名的 `.swp` 文件,则 Vim 会选择其他变体名称存储新的交换文件,比如 `.swo` 或者 `.swm`。这种行为是为了避免覆盖已有的交换文件[^4]。 #### 3. **如何处理这些文件** - 正常情况下,关闭 Vim 后,交换文件会被自动删除。但如果由于某些原因未能正常清理(例如强制终止进程),则可能留下残留的交换文件。 - 用户可以选择手动移除无用的交换文件,也可以利用 Vim 提供的功能进行恢复操作。运行如下命令可以在下次启动 Vim 时询问是否恢复之前的工作内容: ```bash vim -r Makefile ``` --- ### 示例代码展示如何禁用交换文件 如果希望完全禁用交换文件功能,可在用户的全局配置文件(通常是 `~/.vimrc`)中加入以下设置: ```vim set noswapfile ``` 此选项将阻止 Vim 创建任何形式的交换文件。 --- ### 总结 上述提到的 `.makefile.swm`, `.makefile.swn`, 和 `makefile.swo` 都是由 Vim 自动生成的辅助文件,用于保障编辑安全性和多任务协作中的稳定性。它们本身并不参与实际构建流程,也不会影响到 `Makefile` 的正常使用逻辑[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值