尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
1. Makefile 是什么?为什么学?什么情况下用到?
摘要本文介绍了 Makefile 的基本概念、作用和使用场景。Makefile 是一个描述文件依赖关系和构建规则的文本文件能够自动化编译过程提高开发效率。文章详细解释了 Makefile 的工作原理检查依赖、按需编译并通过简单示例展示了其基本语法结构包括目标、依赖、命令以及清理规则。1首先它是一个文本文件用来描述文件之间的依赖关系和构建规则的文本文件。通过编写 Makefile 文件里面的内容会告诉编译器哪些文件需要编译、如何编译、某文件编译时依赖哪个文件。2如果不用 Makefile 的话我们最常用的就是使用 gcc 编译器的编译命令进行编译那么终端每次输入一行命令光对一个简单的文件进行预处理、编译、链接生成可执行文件就需要四个命令当需要编译的源文件比较多时更加复杂。3这时候就需要使用 Makefile它可以自动化构建过程管理复杂的依赖关系提高开发效率减少人为错误。2. Makefile 的工作原理和流程修改源文件 -- 运行 make -- 检查依赖 -- 如果发现有更新则重新编译生成目标文件-- 如果发现没有更新则跳过重新编译生成目标文件3. Makefile 简单使用示例1假设已有一个源文件叫做 hello.c则创建最简单的 Makefile 文件program: main.c hello.cgcc main.c hello.c -o program // 必须是 Tab 开头。不能用空格手敲2对上面 Makefile 文件拆解得到基本语法目标依赖文件列出来Tab 命令1命令2命令3.......3对基本语法进一步改进最终目标文件1.o 文件2.ogcc 文件1 文件2 -o program// 那么文件1和文件2的.o文件在下面生成文件1.o: 依赖文件1.cgcc命令文件2.o: 依赖文件2.cgcc命令.......4清理文件的语法一般情况clean:rm -f *.o program4. 常见错误与排查新手在编写 Makefile 时容易犯一些常见错误导致构建失败或行为不符合预期。以下是三个典型错误及其排查方法和修正方案错误一命令前使用空格而非 Tab错误表现执行make时提示*** missing separator. Stop.或类似错误。排查方法检查 Makefile 中每个规则下的命令即目标后的行是否以真正的 Tab 字符开头。可以使用cat -A Makefile命令查看Tab 会显示为^I而空格则显示为空格。正确写法确保命令前使用 Tab 字符按 Tab 键而不是空格。大多数编辑器支持显示不可见字符可开启该功能辅助检查。# 正确示例 program: main.c hello.c main.c hello.c -o program前面是 Tab 字符 错误示例使用空格 program: main.c hello.c gcc main.c hello.c -o program # 前面是空格不是 Tab错误二依赖关系遗漏错误表现修改了源文件后运行make却没有重新编译对应的目标文件。排查方法检查每个目标的依赖列表是否完整包含了所有直接影响该目标生成的文件通常是源文件、头文件等。正确写法为每个目标明确列出所有依赖文件特别是头文件。# 正确示例包含头文件依赖 program: main.o hello.o gcc main.o hello.o -o program main.o: main.c utils.h gcc -c main.c -o main.o hello.o: hello.c hello.h gcc -c hello.c -o hello.o通过避免这些常见错误可以大大减少 Makefile 编写和调试的时间让自动化构建更加顺畅可靠。
RELATED

相关推荐

【单片机毕设案例分享】基于 NTC 热敏电阻分压采样的智能温度报警系统研发 基于 STM32/51 单片机多指示灯分级温度报警设备设计(022701)

【单片机毕设案例分享】基于 NTC 热敏电阻分压采样的智能温度报警系统研发 基于 STM32/51 单片机多指示灯分级温度报警设备设计(022701)

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

📅 2026/9/4 22:48:21
转行网络安全别死磕技术!合规才是企业刚需敲门砖,运维转岗优势巨大

转行网络安全别死磕技术!合规才是企业刚需敲门砖,运维转岗优势巨大

很多运维转行网安时,只关注 “技术攻击与防御”(如渗透测试、漏洞挖掘),却忽视了 “合规知识”—— 而合规是企业安全的 “底线要求”,也是网安岗位的 “刚需技能”。随着《网络安全法》《数据安全法》《个人信息保护法…

📅 2026/9/1 0:34:41
运维转网安:技能重构与职业发展全解析

运维转网安:技能重构与职业发展全解析

1. 运维转网安:一场职业突围的理性思考凌晨三点,服务器突然宕机的报警短信又一次把你从睡梦中拽起来。这已经是本月第七次了——机房空调故障、磁盘阵列崩溃、莫名其妙的网络抖动...作为有五年经验的运维工程师,你熟练地打开终端开始排查&…

📅 2026/9/9 18:09:16
MORE NEWS

更多资讯

📰

STM32H7+LAN8720A以太网调试实战:从PHY寄存器到LWIP稳定百兆

从PHY寄存器读回来全是0xFFFF,到局域网里能稳定跑到接近100M带宽,这块STM32H7加LAN8720A的网口前前后后折腾了我挺长时间。作为这个系列文章的最后一篇,我把ETH外设和LWIP协议栈配置过程中踩过的坑、排查思路、最终怎么解决的,按实…

📰

从零搭建OpenRig开放式硬件平台:散热、走线与避坑全指南

第一次听说 OpenRig,我还停留在“电脑必须装进机箱才算成品”的旧观念里。直到一块高功耗显卡的散热问题反复折腾我:机箱散热结构看着厚实,可显卡背板的热空气始终排不出去,侧板摸上去都能煎蛋。后来我干脆把整套硬件从机箱里搬出…

📰

ESD防静电烘箱全流程解析:从静电防护到调试交付

今天打包发走一台ESD防静电烘箱,发货前照例拍了几张照片,客户在微信里说了一句“设备到了我们直接上线用”,这比什么验收报告都实在。这台设备的订单不算大,但沟通的时间挺长。客户是做新能源电控板代工的,车间里贴着E…

📰

51单片机驱动SYN6288实现倒车雷达语音播报实战

做倒车雷达课程设计那会儿,学弟拿着题目来找我,说要实现障碍物距离语音播报。我第一反应是搞个MP3模块,去网上找“一米二”“两米三”的现成录音——结果试了两天就放弃了,这种动态数字根本没法穷举。后来换思路,盯上了…

📰

Gazebo仿真中Controller Spawner找不到controller_manager的排查指南

这条信息我太熟了——只要你在 Gazebo 里跑过 ros_control 的仿真,十有八九都见过下面这行:[WARN] : Controller Spawner couldnt find the expected controller_manager ROS interface.配上一路往下滚的报错,机器人模型要么瘫在地上一动不动…

📰

3月28日今日AI分享:把 Cursor Base URL 改到 TaoToken 的完整配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬