Makefile学习全解析——从入门到精通,彻底搞懂构建系统
CSDN专栏:嵌入式程序开发实战嵌入式双范式AI编程嵌入式开发必掌握嵌入式求职面试技术资料Makefile学习全解析——从入门到精通,彻底搞懂构建系统前言:为什么Makefile这么重要?Makefile是Linux/嵌入式开发的基石,几乎所有开源项目、嵌入式SDK都用Makefile构建。理解Makefile,才能真正理解项目的构建过程。新手常见困惑:Makefile看着像天书,完全看不懂不知道make命令到底做了什么为什么有时候改了代码不需要重新编译,有时候又需要?变量、自动变量、模式规则都是什么意思?本文结构:按照学习路径,从入门到进阶再到高级,循序渐进讲解。第一部分:入门阶段——理解基本概念一、Makefile是什么?1.1 Makefile的作用Makefile的本质:一个描述文件,告诉make工具如何构建项目定义了目标文件、依赖关系、构建命令实现增量编译:只编译修改过的文件比喻:Makefile就像菜谱,告诉厨师(make工具)如何做菜(构建项目)目标就像菜名(如"红烧肉")依赖就像食材(如"猪肉、酱油、糖")命令就像烹饪步骤(如"切块、翻炒、炖煮")1.2 为什么需要Makefile?问题一:手动编译太麻烦假设项目有10个.c文件,每次编译都要输入:gcc -c main.c -o main.ogcc -c uart.c -o uart.ogcc -c spi.c -o spi.o…(10条命令)gcc main.o uart.o spi.o … -o app问题二:重复编译浪费时间只修改了一个文件,却要重新编译所有文件,浪费时间。Makefile的优势:一条命令完成所有编译:make自动判断哪些文件需要重新编译只编译修改过的文件,节省时间1.3 make的工作流程工作流程:make读取Makefile文件找到第一个目标(默认目标)检查目标的依赖文件如果依赖文件比目标新,执行构建命令递归处理所有依赖时间戳判断:每个文件都有修改时间(时间戳)如果依赖文件的时间戳 目标文件的时间戳,说明依赖文件被修改过,需要重新构建二、最简单的Makefile2.1 基本语法三要素:目标(Target):要生成的文件依赖(Dependencies):生成目标需要的文件命令(Commands):生成目标的命令格式:目标: 依赖 命令注意:命令前面必须是Tab键,不能是空格!2.2 第一个Makefile示例项目结构:main.cuart.cuart.hMakefile:app: main.o uart.o gcc main.o uart.o -o app main.o: main.c uart.h gcc -c main.c -o main.o uart.o: uart.c uart.h gcc -c uart.c -o uart.o执行过程:make找到目标app检查依赖main.o和uart.o是否存在如果不存在,先构建main.o和uart.o最后链接生成app2.3 伪目标(Phony Target)什么是伪目标?不生成实际文件的目标用于执行特定任务常见伪目标:伪目标作用all构建所有目标clean清理生成的文件install安装程序test运行测试示例:clean: rm -f *.o app .PHONY: clean.PHONY的作用:告诉make,clean是伪目标即使当前目录有clean文件,也要执行clean目标三、Makefile的依赖关系3.1 依赖关系图

相关新闻

Ollama量化到底选GGUF还是Q4_K_M?实测17个主流模型在M1/MacBook Pro上的推理速度与显存占用对比报告

Ollama量化到底选GGUF还是Q4_K_M?实测17个主流模型在M1/MacBook Pro上的推理速度与显存占用对比报告

更多请点击: https://kaifayun.com 第一章:Ollama量化模型选型的核心矛盾与评测基准 在本地大模型部署实践中,Ollama 的轻量级推理能力高度依赖量化模型的选型决策。然而,开发者常陷入“精度—速度—内存”三元悖论:更…

2026/10/20 15:09:52 阅读更多 →
【实战复盘】基于 WebGPU 的裸眼 3D 视频渲染引擎:从数学推导到性能调优

【实战复盘】基于 WebGPU 的裸眼 3D 视频渲染引擎:从数学推导到性能调优

一、 项目背景与痛点 随着 XR/VR 技术的爆发,Web 端的 3D 渲染需求激增。传统的 WebGL 在应对复杂场景时已显疲态。本项目旨在基于最新的 Three.js (r182) 和 WebGPU 节点系统,从零构建一个轻量级的裸眼 3D 视频渲染引擎,解决传统方案中“渲染…

2026/10/20 9:00:20 阅读更多 →
企业为什么做GEO?2026年7亿用户涌入AI搜索,不做GEO的品牌正在被“隐形”

企业为什么做GEO?2026年7亿用户涌入AI搜索,不做GEO的品牌正在被“隐形”

某家电企业市场负责人在2026年Q2的复盘会上,看到了一组让她坐不住的数据:品牌官网的自然搜索流量同比下降了42%,而同期品牌在豆包和DeepSeek上的搜索提及量为零。她花了三个月排查渠道、复盘内容、检查投放,最终发现了一个残酷的事…

2026/10/17 16:42:57 阅读更多 →

最新新闻

PySpark与Hadoop图书推荐系统毕设:从环境搭建到答辩全流程

PySpark与Hadoop图书推荐系统毕设:从环境搭建到答辩全流程

计算机毕业设计里,图书推荐系统这个题目几乎年年有人选。它业务场景具体、数据可解释性好、推荐算法能体现技术含量,关键是答辩时老师容易听懂。而一旦在这个题目前面加上 PySpark 和 Hadoop,再配一块可视化大屏,项目定位就从“普…

2026/10/20 15:09:47 阅读更多 →
MinGW64 UCRT+SEH环境配置指南:搞定C++23编译

MinGW64 UCRT+SEH环境配置指南:搞定C++23编译

简介:本资源为 MinGW64 x86-64 15.2.0 官方发布版完整工具链,面向 Windows 平台 C/C 开发者、跨平台项目维护者及嵌入式/底层编程学习者,解决在无 Visual Studio 环境下构建高性能、SEH 兼容、UCRT 支持的原生 64 位应用的核心需求。压缩包含…

2026/10/20 15:09:47 阅读更多 →
基于Python的网易云音乐数据分析与可视化平台实战

基于Python的网易云音乐数据分析与可视化平台实战

做毕业设计那会儿,我在选题上纠结了很久。手头有几个备选,但大多是“管理系统”那套老路子:增删改查、登录注册、表格展示。做出来不是不行,但答辩现场很难出彩。后来我换了个思路——与其做业务系统,不如做一个“能讲…

2026/10/20 15:09:47 阅读更多 →
Kali Linux安装Burp Suite:Java配置、代理设置与HTTPS证书导入

Kali Linux安装Burp Suite:Java配置、代理设置与HTTPS证书导入

很多刚入手Kali的朋友,第一个想装的工具八成就是Burp Suite。但说实话,网上教程虽然多,真正从零开始装到能抓包、能看HTTPS流量,中间其实藏着不少坑——Java版本不对、证书装不上、代理连不上、界面起不来,随便一个都能…

2026/10/20 15:09:47 阅读更多 →
XZ Utils后门事件复盘:从SSH登录异常到供应链攻击

XZ Utils后门事件复盘:从SSH登录异常到供应链攻击

3 月底的邮件列表上,一个看起来再普通不过的问题帖引起了我的注意。发帖者说自己在升级了某个系统包之后,通过 SSH 登录服务器的耗时从几十毫秒涨到了五百毫秒以上,同时 sshd 的 CPU 占用明显偏高。他试着回退了 XZ Utils 的版本,…

2026/10/20 15:09:47 阅读更多 →
LeRobot定位解析:端到端策略学习与ROS2的边界

LeRobot定位解析:端到端策略学习与ROS2的边界

刚接触LeRobot那会儿,我也和大多数朋友一样,下意识以为它是又一个机器人操作系统,能对标ROS2,甚至还想拿它去做导航和路径规划。后来把这套框架真正跑起来才发现,这玩意儿压根不干那些活,它的主业是把“感知…

2026/10/20 15:08:45 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/20 9:50:45 阅读更多 →