首页/新闻资讯/正文详情

Makefile学习全解析——从入门到精通,彻底搞懂构建系统

发布时间:2026/9/24 17:02:27 来源:云帆数科 栏目:资讯中心
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 依赖关系图

相关推荐

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

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

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

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

Bun 创始人 11 天用 Claude 重写 53 万行 Zig 到 Rust:64 个 Agent 并行跑出的百万行代码,到底能不能信?
Bun 创始人 11 天用 Claude 重写 53 万行 Zig 到 Rust:64 个 Agent 并行跑出的百万行代码,到底能不能信?

上周四晚上刷到 Bun 创始人 Jarred Sumner 的博客时,我第一反应是看日期——不是愚人节吧。他只用 11 天,把 Bun——这个被几十万开发者天天用的 JavaScript 运行时——从 53.5 万行 Zig 代码整个重写成了 Rust。而且写这 100 万行代码的 不是人类&#… · 2026/9/3 23:46:30

【Coze】【视频】三分钟读一本书
【Coze】【视频】三分钟读一本书

今天给大家演示一个 《三分钟读一本书》Coze 工作流。该工作流通过大模型驱动的分镜文案生成、图像合成、语音合成以及视频草稿自动创建等一整套流程,将一本书的内容浓缩为一个三分钟的视频,实现从文本到成片的全自动化制作。用户只需输入书名、作者和个人账号信息,即可得到… · 2026/9/24 17:02:12

第24篇-MCP-Client架构-Host应用如何管理多个Server连接
第24篇-MCP-Client架构-Host应用如何管理多个Server连接

【MCP 全栈教程】第 24 篇:MCP Client 架构——Host 应用如何管理多个 Server 连接 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。… · 2026/9/24 17:01:59

第21篇-MCP-Server测试-MCP-Inspector与自动化测试
第21篇-MCP-Server测试-MCP-Inspector与自动化测试

【MCP 全栈教程】第 21 篇:MCP Server 测试——MCP Inspector 与自动化测试 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。 本篇你… · 2026/9/24 17:01:59

OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略
OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略

OneNote 笔记如何备份才不丢数据:3 种方案完整保姆级攻略 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验,资源和OneNote笔记 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-408 用 OneNote 攒了几个月笔记,某次… · 2026/9/24 17:01:59

使用 AWS SDK for C++ 编写 Hello SNS:通过 ListTopics 入门 Amazon SNS
使用 AWS SDK for C++ 编写 Hello SNS:通过 ListTopics 入门 Amazon SNS

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地… · 2026/9/24 17:01:53

pip 的 towncrier 变更日志模板解析:从 news fragment 到 NEWS.rst 的渲染机制
pip 的 towncrier 变更日志模板解析:从 news fragment 到 NEWS.rst 的渲染机制

包管理器开发工具 【免费下载链接】pip The Python package installer 项目地址: https://gitcode.com/gh_mirrors/pi/pip 点击查看 免费下载 本篇技术指南围绕 pip 仓库中维护变更日志的核心模板文件 tools/news/template.rst 展开,系统讲解 pip 如何基… · 2026/9/24 17:01:53

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码