Linux之make,makefile

什么是make 和makefile

make 是命令,Makefile 是规则文件 ,它们是 Linux 下自动化编译 / 构建程序的核心工具。

mekefile

直接上手写一下

makefile内容是以下

  • 命令行必须以 Tab 开头,不能用空格!
  • 冒号 : 前后可以有空格,不影响

test.c的内容

此时我们不手动用gcc去编译

make

我们使用make,他将我们在makefile里面的执行内容输出,同时在文件夹下面出现了一个新的文件test.exe,此时我们将其运行,结果就是执行了c代码的内容

以上是简单初步认识make和makefile

.PHONY

我加入一些到makefile里面

然后运行 make clear,根据我们上面所学的 应该是可以将之前运行产生的test.exe文件删除。

我们来看这个现象

当我们make时,make默认是执行第一条命令

所以在执行其他命令时我们 后面要加上依赖文件

在上面这个截图显示,make命令只能执行一次,而make clear却是可以一直执行,这是为什么呢?

因为我们在clear前面有一个.PHONY,为了更好的理解,我们先要进行一些其他的了解

首先为什么第一条命令不能一直执行呢?

我们要明白如果我们一直将一个文件编译连接形成可执行程序,是一件很消耗资源的事情,,所以不能一直这样,而且当我对文件XX.c文件进行修改时,这时编译链接才有作用。那linux是如何来确定一个文件是否要重新编译链接呢,关键就是在于时间,

stat 文件名 可以查看文件的详细状态

当我在修改文件

modify,将文件内容修改时,时间会发生更新

change,文件内容或者文件属性发生修改时,时间会发生更新

access,主要是查看文件,到达一定次数后,时间会发生更新(因为要提高效率,不然看一下都要记录时间,access,和change都要变化)

这里当我修改文件后文件的modify时间发生修改,,此时我们make 文件,才会执行我们的指令

touch 文件名也可以做到

总结一下make是如何判断是否要执行的?

当test.exe文件的时间在test.c文件之后,make将不会执行。

当test.exe文件的时间在test.c文件之前,make将会执行。

而为什么make clear可以一直执行就是因为.PHONY告诉make,这个目标不是真实文件,不要去对比时间,每次都要强制执行。

如何在makefile执行多个文件的编译链接操作

你有 很多个 .c 文件,想让 Makefile:

  1. 自动找到所有 .c 文件
  2. 分别编译成 .o
  3. 自动链接所有 .o
  4. 一键生成最终程序

理解下面符号的意思,即可在实践中使用

相关推荐
Yana.nice9 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
2601_9605679611 小时前
电商套图自动化效率的工程量化分析——从逐张生成到批量套图的架构演进
运维·架构·自动化
吳所畏惧12 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈12 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HiDev_13 小时前
【非标自动化】2、认识元器件(确定目标)
运维·自动化
维天说13 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zhang~Ling14 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind14 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的阿森14 小时前
鸿蒙三方库 | harmony-utils之PreferencesUtil首选项数据监听详解
服务器·华为·harmonyos·鸿蒙·huawei
爱写代码的森14 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei