Makefile简单理解及介绍
1.makefile的基础概念makefile常常和make命令搭配使用属于make命令的配置文件当我们调用make命令时make会在当前目录下找名字叫“Makefile”或“makefile”的文件在makefile中定义了系列的规则来指定哪些文件需要先编译哪些⽂件需要后编译哪些⽂件需要重新编译甚至是更复杂的操作。一般来说makefile里包含以下三个内容。目标需要生成的文件依赖生成目标所需要的文件命令所执行的指令其中需要注意的是命令开头必须以tab键开头格式如下目标依赖命令示例myproc:myproc.o gcc myproc.o -o myproc myproc.o:myproc.s gcc -c myproc.s -o myproc.o myproc.s:myproc.i gcc -S myproc.i -o myproc.s myproc.i:myproc.c gcc -E myproc.c -o myproc.i .PHONY:clean clean: rm -f *.i *.s *.o myproc上述代码可帮助你将myproc.c生成一个myproc文件。2.makefile的工作原理1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件。2.如果找到它会找⽂件中的第⼀个⽬标⽂件target在上面的例子中它会找到myproc这个⽂件并把这个⽂件作为最终的⽬标⽂件。3.如果myproc⽂件不存在或是myproc所依赖的后⾯的myproc.o⽂件的⽂件修改时间要⽐myproc这个⽂件新那么他就会执⾏后面所定义的命令来⽣成myproc 这个⽂件。4.如果myproc所依赖的myproc.o⽂件不存在那么make会在当前⽂件中找⽬标为myproc.o⽂件的依赖性如果找到则再根据那⼀个规则⽣成myproc.o ⽂件。5.这就是整个make的依赖性make会⼀层⼜⼀层地去找⽂件的依赖关系直到最终编译出第⼀个⽬标⽂件。3.makefile里变量CC gcc这里用CC替换了gcc定义变量使用等于号。BINmyproc.exe CCgcc SRC$(wildcard *.c) OBJ$(SRC:.c.o) RMrm -f $(BIN):$(OBJ) $(CC) -o $ $^使用变量时需要用$(),如这里的$(CC)相当于gcc。需要注意的是在makefile里有几个便捷的变量符号$:代表目标文件如上面的BIN。$^:代表依赖文件如上面的OBJ。$:代表第一个依赖文件。4.伪目标常常使用.PHONY修饰伪目标的特性是总是被执行的。BINmyproc.exe 2 CCgcc 3 SRC$(wildcard *.c) 4 OBJ$(SRC:.c.o) 5 RMrm -f 6 $(BIN):$(OBJ) 7 $(CC) -o $ $^ 8 %.o:%.c 9 $(CC) -c $ 10 .PHONY:clean 11 clean: 12 $(RM) $(OBJ) $(BIN)在这里clean命令被.PHONY修饰属于伪目标这就会让make忽略源⽂件和可执⾏⽬标⽂件的M时间对比总是可以执行这条命令不是伪目标就需要比较源文件和可执行文件的modify时间的先后如源文件的modify时间比可执行文件的modify时间早则编译的操作不会被执行反之会编译一个新的可执行文件。5.适当拓宽语法BINproc.exe # 定义变量 CCgcc #SRC$(shell ls *.c) # 采⽤shell命令⾏⽅式获取当前所有.c⽂件名 SRC$(wildcard *.c) # 或者使⽤ wildcard 函数获取当前所有.c⽂件名 OBJ$(SRC:.c.o) # 将SRC的所有同名.c 替换 成为.o 形成⽬标⽂件列表 LFLAGS-o # 链接选项 FLAGS-c # 编译选项 RMrm -f $(BIN):$(OBJ) $(CC) $(LFLAGS) $ $^ # $:代表⽬标⽂件名。 $^: 代表依赖⽂件列表 echo linking ... $^ to $ %.o:%.c # %.c 展开当前⽬录下所有的.c。 %.o: 同时展开同名.o $(CC) $(FLAGS) $ # %: 对展开的依赖.c⽂件⼀个⼀个的交给gcc。 echo compling ... $ to $ # 不回显命令 .PHONY:clean clean: $(RM) $(OBJ) $(BIN) # $(RM): 替换⽤变量内容替换它其中%.o是展开当前目录的所有.o文件%.c是展开当前目录的.c文件在命令前加上让在执行make时命令不回显。shell,wildcard可以帮助我们批量获得想要的文件名字。

相关新闻

UE5 AI寻路实战:从Move To节点到行为树的完整解决方案

UE5 AI寻路实战:从Move To节点到行为树的完整解决方案

1. 项目概述:从蓝图到路径,理解AI寻路的核心在UE5里鼓捣AI,想让一个角色自己走到某个地方,这几乎是每个新手都会遇到的第一个“坎”。很多教程会直接甩给你一个“Move To”节点,告诉你连上线就能跑。但真到自己上手&am…

2026/8/3 7:20:57阅读更多 →
并查集原理、优化与实战应用详解

并查集原理、优化与实战应用详解

1. 并查集基础概念与核心价值并查集(Disjoint Set Union,简称DSU)是我在算法竞赛和工程实践中使用频率最高的数据结构之一。它本质上是一种树形的数据结构,主要用于处理不相交集合的合并与查询问题。第一次接触这个概念是在解决网…

2026/8/3 7:18:57阅读更多 →
推荐一下家用神台源头厂家

推荐一下家用神台源头厂家

我做家用神台垂类已经有5年啦,出过10w 的爆款呢,这其中积累了不少经验,也有不少真实体验和一线洞察。今天就来跟你唠唠家用神台源头厂家那些事儿。在我们这个行业,用户的痛点可不少。很多人一开始不知道咋选,市场上品…

2026/8/3 7:18:57阅读更多 →
Unity游戏实时文本翻译:从架构设计到Google Cloud API实战

Unity游戏实时文本翻译:从架构设计到Google Cloud API实战

1. 项目概述:为什么Unity游戏需要实时文本翻译? 做全球化游戏,最头疼的往往不是技术实现,而是语言本地化。传统做法是策划配表、程序读取,一个语言一个版本,流程长、成本高,而且上线后想加个新语…

2026/8/3 8:27:42阅读更多 →
为什么大模型 Agent 越并发越慢:从排队论、尾延迟到多模型流量工程

为什么大模型 Agent 越并发越慢:从排队论、尾延迟到多模型流量工程

很多团队优化大模型系统时,会先盯住模型本身:换一个更快的模型、缩短 Prompt、增加并发连接,或者在超时后自动重试。低负载测试中,这些方法往往立刻见效;一旦 Agentic Workflow 进入真实流量,系统却可能出现…

2026/8/3 8:27:42阅读更多 →
毕设项目分享 深度学习语义分割实现弹幕防遮(源码分享)

毕设项目分享 深度学习语义分割实现弹幕防遮(源码分享)

文章目录0 简介1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法3 实例分割4 实现效果最后0 简介 今天学长向大家分享一个毕业设计项目 毕业设计 深度学习语义分割实现弹幕防遮(源码分享) 🧿项目分享:见主页任意置顶文章 1 课题背景 弹幕是…

2026/8/3 8:27:42阅读更多 →
软件知识产权保护:从历史争议到现代技术对抗

软件知识产权保护:从历史争议到现代技术对抗

1. 软件知识产权争议的历史溯源1976年2月,时年21岁的哈佛大学辍学生比尔盖茨撰写了一封致计算机爱好者的公开信,这封题为《致电脑爱好者的公开信》的文档,成为了软件行业发展史上的标志性事件。当时微软刚成立不到一年,主要产品是…

2026/8/3 8:27:42阅读更多 →
NOI经典01串问题:滑动窗口与单调队列解法详解

NOI经典01串问题:滑动窗口与单调队列解法详解

1. 项目背景与题目解析 这道来自NOI1999的经典题目"01串"(题目编号P5627/P5751)是信息学奥林匹克竞赛中极具代表性的字符串处理类问题。题目要求我们分析由0和1组成的特定序列,找出满足特定条件的最长子串。这类题目在信奥赛场上频…

2026/8/3 8:27:42阅读更多 →
单片机毕设选题推荐:基于单片机 TS-300B 浊度检测报警设备设计 基于 51 内核单片机的水质智能预警装置实现(018101)

单片机毕设选题推荐:基于单片机 TS-300B 浊度检测报警设备设计 基于 51 内核单片机的水质智能预警装置实现(018101)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/3 8:25:42阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 0:29:53阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/3 0:33:53阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/3 0:20:37阅读更多 →
3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:32阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/3 2:32:59阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/3 2:33:01阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/3 2:33:04阅读更多 →