news 2026/10/8 12:27:15

24 篇 Makefile 核心教程,从入门到工程级交付,一次讲透

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
24 篇 Makefile 核心教程,从入门到工程级交付,一次讲透

一、专栏文章目录

二、这个专栏在做什么

我把《Makefile 核心教程》拆成了 24 篇,不是为了凑篇数,而是因为这个主题有一个很清晰的学习阶梯。跟着走,你会经历三个阶段。

第一阶段:把语法彻底变成肌肉记忆(1–11 篇)

从最基础的规则语法开始,到注释、变量、伪目标、打印信息、通配符、模式规则、条件判断、循环、函数、隐含规则。

这一阶段的写法很"笨":一个知识点一篇文章,尽量只讲一件事,标题里那些"一文讲透"不是噱头,是我给自己定的规矩——能不假设读者已经懂任何东西。

比如变量那一篇,我会讲清楚=、:=、?=、+=在求值时机上的真实差别(这是 90% 教程糊弄过去的地方),而不是丢一句"即时展开和延迟展开的区别你自己体会";比如函数那一篇,$(subst)、$(patsubst)、$(strip)、$(foreach)、$(call)、$(eval)会按"能干什么 / 什么时候用"分组,顺手说清$(call)和$(eval)这对容易误用的组合。

这一阶段读完,你的标准是:看到任何一份陌生 Makefile,不会慌,能一行一行读下去,知道每一行的意图。

第二阶段:从"能编译"到"能组织"(12–18 篇)

这是教程最容易跳过、而真实项目最花钱的部分。

  • 文件包含:多个 Makefile 如何拆分,include的执行时机,以及那个经典的"文件不存在还找不到规则"的问题。
  • 多目标构建:一条命令同时产出 app、lib、test,依赖关系怎么排。
  • 多目录递归 Make:GNU Make 官方的经典范式。它为什么这么设计,-C到底做了什么,子 Make 怎么把变量传给父 Make(靠环境变量,不是靠命令行——这个细节能省你半天)。
  • 多目录非递归 Make:单一 Makefile 驱动整个项目,用$(eval)+ 变体变量组合出"每个目录一个 Makefile 片段但只有一个执行上下文"的写法。这一篇我会把两种方案放在一起对比,告诉你什么时候该递归、什么时候必须非递归,而不是只吹一种。
  • 静态库的构建与链接:ar的参数、ranlib、符号表,以及最常见的那个坑——链接顺序。
  • 动态库的构建与链接:-fPIC为什么每个编译单元都要加,-shared、-Wl,-soname、-rpath、-ldl,以及运行时搜索路径的三种解法(LD_LIBRARY_PATH/rpath/ 装到系统目录)各自的适用场景。
  • 链接第三方库:pkg-config 到底在做什么,交叉编译时为什么PKG_CONFIG_LIBDIR必须改,静态库与动态库混链的顺序与--whole-archive的时机。

这一阶段读完,你的标准是:能从一个空目录开始,为一个真实的中小型项目(多目录 + 库 + 第三方依赖 + 交叉编译)搭出一套自己的构建骨架。

第三阶段:让它配得上"交付"两个字(19–24 篇)

这是我私心最想写的部分。大部分教程讲到"编译通过"就结束了,但你的代码离开你的机器,还要经历打包、发布、被别人构建、被 CI 反复执行。真正的工程,是在这里开始出问题的。

  • 交叉编译实战:从零配置一条 ARM / RISC-V 工具链,讲清CC、CROSS_COMPILE约定、sysroot、--sysroot与--sysroot之外那堆参数的区别、如何验证交叉编译器产物真的是目标架构的。
  • 多编译模式与一键切换:Debug / Release / Sanitizer / 覆盖率,如何用一层变量抽象出"配置",然后make mode=release一键切换。这是我自己项目里用得最多的一个模式,会给出完整可用的一份设计。
  • 跨平台构建:Linux / macOS / Windows,差异集中在哪几处(换行、路径分隔符、ar参数、shell 差异、rm -f与del),以及怎么用条件赋值把它们抹平。
  • 自动化打包与发布:从"能编译"到"可交付"。目标文件、压缩、校验和、版本号注入、打包脚本、CI 里怎么串、make dist怎么做一份可复现的 tarball。这一篇里出现的很多细节,是从"发版失败一次"换来的。
  • 万能模板:一份可以直接拷走使用的通用 Makefile,适配绝大多数 C/C++ 项目。这份模板不是玩具,它是把前面所有知识点收敛成一处——你能一眼看懂每一块为什么这么写,也能放心地改。
  • 调试与优化:编译报错怎么定位(从链接错误反查是哪个符号、哪个库、哪个顺序)、增量构建的正确姿势(-MMD -MP与依赖文件)、-fsanitize怎么配、并行构建-j为什么会让某些 Makefile 炸掉、常见提速手段和它们各自的代价。

三、写给谁

  • 零基础、想要从零入门 Makefile 的初学者
  • 日常使用 Makefile 进行项目工程构建的开发工程师
  • 有基础、希望深耕 Makefile 实现进阶提升的开发者

如果你要的只是"能写个简单 Makefile",那前 11 篇就够了,按需读,不必勉强。如果你要的只是"能写个简单 Makefile",那前 11 篇就够了,按需读,不必勉强。

四、关于写法

有几条我一直在坚持,顺便说在这里:

无法简单清晰地阐述一件事物,代表你尚未完全掌握它。

越是理解透彻的人,越愿意用最简单通俗的语言讲清道理,越能用大白话讲透;反而认知浅薄、一知半解的人,总偏爱用深奥繁复的词汇包装自己,越爱堆砌晦涩术语故作高深。

我的技术写作理念:褪去晦涩术语,用浅显易懂的文字拆解技术核心,兼顾零基础入门读者。能把复杂原理说得简单明白,也是对自身技术功底最好的复盘与精进。

五、这 24 篇,现在入手最划算

前 11 篇文章也同步发布在了公众号嵌入式技术部落,但是不提供源码,您可以先看这 11 篇文章,看看文章质量,如果觉得不错,想要进阶,那么可以直接购买该专栏,源码链接专栏文章内部都有提供。如果您只是想学习基础,那么这 11 篇完全足够了。

有需要可微信小程序小报童搜索萧邯嵌入式笔记,购买专栏。

另外随着文章的更新,价格也会同步上涨。该专栏后续新增内容持续更新,一次购买,永久拥有,不再额外收费。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 12:27:02

Windows下Claude Code本地部署深度指南

1. 这不是“又一个AI插件安装教程”,而是Windows环境下Claude Code落地的实操手记我从去年底开始在Windows台式机和笔记本上反复折腾Claude Code,前前后后重装了7次系统环境,试过WSL2、Docker Desktop、原生Windows服务部署、VS Code Remote-…

作者头像 李华
网站建设 2026/10/8 12:25:51

Java+MySQL局域网即时通信系统实战

简介:本资源是一套面向高校计算机专业课程设计与Java网络编程初学者的局域网即时通信系统实践项目,基于Java 8与MySQL实现简易微信核心功能,解决局域网内用户注册登录、好友管理、点对点文字/图片聊天、群发消息及服务端-客户端稳定通信等典型…

作者头像 李华