Linux 学习笔记(九):自动化构建神器 Make 与 Makefile

发布时间:2026/10/23 3:03:40

Linux 学习笔记(九):自动化构建神器 Make 与 Makefile 一、 为什么需要 Makefile上一节学了 GCC 编译但如果一个项目有几十个源文件且每次只改了一个文件手动敲 gcc 命令重新编译所有文件是非常低效的。Makefile 解决了两个大问题把复杂的编译命令封装起来只需敲一个make就能编译整个项目。实现“增量编译”它通过对比源文件和目标文件的修改时间只编译修改过的文件。二、 Makefile 的编写规则核心公式是目标 : 依赖换行后写命令。⚠️ 最大的天坑命令前面必须按 Tab 键绝对不能用空格否则会报错missing separator。三、 实战演示1. 最基础的 Makefilehello: hello.c gcc hello.c -o hello执行make系统会自动调用对应的 gcc 命令。2. 伪目标 .PHONY当我们需要执行一些清理动作如make clean删除编译产物时为了防止同名的文件干扰需要声明伪目标。.PHONY: clean clean: rm -f hello声明为.PHONY后make clean总是会被无条件执行。3. 使用变量优化为了让 Makefile 更具扩展性我们可以引入变量BIN hello SRC hello.c $(BIN): $(SRC) gcc $(SRC) -o $(BIN) .PHONY: clean clean: rm -f $(BIN)总结make是一个命令Makefile是一个规则文件。它通过比较文件的Modify时间修改时间来决定是否重新编译极大地提升了开发效率。自我实战操作linux_study/gcc_test目录里操作。实战 1写第一个 Makefilecd ~/linux_study/gcc_test vim Makefile # 注意首字母大写或者全小写 makefile 也行在 Vim 里按i进入插入模式输入以下内容(注意第二行的开头必须按一下键盘上的 Tab 键千万别敲空格)hello: hello.c gcc hello.c -o hello按Esc输入:wq保存退出。实战 2使用 make 编译# 1. 删掉之前手动编译的旧文件确保干净 rm -f hello # 2. 直接敲 make 命令 make # 输出gcc hello.c -o hello 它自动读取了 Makefile 并执行了里面的命令 # 3. 验证一下程序 ./hello实战 3体验 Make 的“智能”特性# 1. 再次敲 make make # 输出make: hello is up to date. 它会说 hello 已经是最新的了不重复编译省时间 # 2. 我们用 touch 修改一下 hello.c 的修改时间 touch hello.c # 3. 再次 make make # 输出gcc hello.c -o hello 它发现 hello.c 比 hello 新于是重新编译了实战 4加入伪目标clean重新编辑Makefilevim Makefile改成这样注意rm前面依然是Tabhello: hello.c gcc hello.c -o hello .PHONY: clean clean: rm -f hello保存退出后测试一下make clean # 会执行 rm -f hello把程序删掉 ls # 发现 hello 没了实战 5Makefile 进阶语法变量前面的代码写死了hello.c如果有多个文件每次改 Makefile 太麻烦。我们用变量优化这部分面试提到会加分# 定义变量 BIN hello SRC hello.c $(BIN): $(SRC) gcc $(SRC) -o $(BIN) .PHONY: clean clean: rm -f $(BIN)(注意Makefile 里的变量赋值和引用跟 Shell 脚本略有不同直接写变量名 值引用用$(变量名))
延伸阅读

更多相关文章

2026/10/23 3:03:40

文件定位、文件IO

标准io读写归纳总结fputs和fgets最常用文件定位fseek ftell rewindfseek若从末尾开始向后偏移,则偏移多少,系统自动补零多少示例:ftell示例:rewind示例:练习:复制文本文件内容数一个文件里面字母a~z共出现多…

2026/10/23 3:03:40

边缘AI进入建筑后,WiFi Halow技术帮集成商搞定带宽、距离和功耗

边缘AI正在改变数据在建筑里的流动方式,让建筑变得越来越智能。视频监控能实时认出人、车辆和异常活动;门禁系统能把身份验证、数据分析和自动反应结合起来;空调和供暖系统会根据房间里有没有人来调节能耗;环境传感器能在空气质量…

2026/10/23 4:03:51

MATLAB常见问题30秒速查与高效排障指南

1. MATLAB高效排障指南:30秒解决常见问题作为一名MATLAB老用户,我深知在科研和工程计算中,那些突如其来的报错信息有多让人头疼。记得刚接触MATLAB时,一个简单的矩阵维度不匹配就能让我折腾半天。经过多年实战,我总结出…

2026/10/23 4:03:51

libva中的DRM模块

主要内容 本文主要就libva中的DRM的流程进行简单说明,libva版本为libva-2.11.0(版本号为1.11.0),Digital Rights Management(DRM)指的是数字版权管理,用以保护具有版权的数字产品,包括视频,音乐,电子书等等…

2026/10/23 4:03:51

Java:54-Linux概述

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

2026/10/23 4:03:50

linux软连接和硬链接

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

2026/10/23 3:58:50

LangGraph+MCP实战:构建AI-SPC智能根因分析系统

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

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑