首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自动化构建-Makefile

自动化构建-Makefile

作者头像
用户11290664
发布2025-08-21 08:16:40
发布2025-08-21 08:16:40
820
举报
文章被收录于专栏:学习学习

依赖关系

伪目标是可以总是执行的,只要make 依赖文件就行, 就像图片中make clean后就会执行rm -f mytest文件

因为如果源文件不改的话,make会显示没有更新,第二次就会失败。 我们在依赖关系前面加上

.PHONY:目标文件

这样就解决了makefile只能构建,不更新无法执行的问题。 可以把.PHONY看作总是执行的。

这样我们创建一个文件后

makefile

两种方式

make 指定文件 make

第一种可以形成指定文件,比如make clean 第二种是自上向下扫描形成第一个文件

stat 具体文件名

文件=内容+属性

内容更改modify就会更改, 属性更改change就会更改。

acceess是最近访问时间 touch 文件名 可以更新M时间。 上面makefile对比更新时间就是M时间,就是修改时间。 echo会回显,前面加@就会取消回显。

分布依赖关系

根据上篇文章我们知道了文件的编译过程是由iso临时文件编译的可执行程序生成的。如下图。 最后也可以省略中间的部分写成

gcc test.c -o mytest

我们make最后看到的编译过程

这就是一个压栈的过程,先写的语句不执行,没找到依赖文件就一直压栈,找到最后找到了,就出栈。

通用makefile

我们通常用编译文件形成可执行程序的时候我们都是拿好多的.c文件编译成.o文件和库文件(暂时不提)和在一起链接成可执行程序。

这样我们形成了通用的makefile

根据上面的我们可以写成一个模板 这样我们就不要频繁的改所有文件名了

上面的定义类似于c++中里的宏。

但是这样还是不通用,万一我们源文件有多个怎么办?

有两种方法

这样就能拿到所有的.c文件。

下面拿到所有.o文件 ^是拿到所有OBJ里的文件 @是拿到所有BIN里的文件 编译过程写为 %是通配符匹配内容

最后这个版本就是最通用的,单个多个文件都适用 注意这里@是目标文件,第二个依赖关系省略了 -o (OBJ)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 依赖关系
  • makefile
  • stat 具体文件名
  • 分布依赖关系
  • 通用makefile
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档