news 2026/10/10 6:01:31

Makefile 自动化编译六连工程:从基础规则到自动依赖、静态库与动态库全实测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Makefile 自动化编译六连工程:从基础规则到自动依赖、静态库与动态库全实测

Makefile 自动化编译六连工程:从基础规则到自动依赖、静态库与动态库全实测

Makefile 教程常见的两个痛点:例子太琐碎拼不成体系,或者直接上大型项目看不懂。这套教学工程用 6 个目录走一条平滑曲线——从「最基础的三段式规则」递进到「自动依赖、静态库、动态库」,每个工程都带真实编译输出,全部在 Windows 11 x64 + GNU Make 4.4.1 + GCC 16.2.0(w64devkit 工具链)实测通过。

一、六个工程一条曲线

目录教学点实测结果
01-basic目标/依赖/命令三段式add(2,3)=5 factorial(6)=720
02-variables:= ?= 与自动化变量 $@ $< $^-Wall -Wextra 零告警
03-wildcardwildcard/patsubst 收集源文件新增 .c 免改 Makefile
04-depfiles静态模式规则 + -MMD -MP改头文件只重编 2 个 .o
05-static-libar rcs 打包 + -L -l 链接libmymath.a 生成链接成功
06-dll-shared 出 dll + 导入库dll 39,439B / exe 87,881B

按目录编号顺序读每个 Makefile 的注释,每条新语法都建立在前一个例子的基础上,一遍下来规则、变量、依赖、库链接全部打通。

二、自动依赖三件套(最容易被忽略的实战点)

手写依赖会漏——改了头文件忘写依赖,改动不生效;全量重编又浪费。标准解法三行:

%.o: %.c $(CC) -Wall -MMD -MP -c $< -o $@ -include $(DEPS)

编译时顺手生成.d依赖描述文件,Make 下次运行自动知道「main.o 依赖 math_utils.h」。实测 touch 一个头文件,只有包含它的两个 .o 被重编,string_utils.o 纹丝不动——大型项目里这是分钟级与小时级的差距。

三、高频踩坑速查

现象原因与解决
missing separator命令行必须 TAB 缩进,空格不行
改了 .h 没 反应没生成自动依赖,用 -MMD -MP -include
dll 程序闪退运行目录要有 dll,或把 dll 目录加入 Path
clean 在 Windows 报错命令前加 - 忽略失败,或用 $(RM)

四、使用方法

装好带 gcc 与 make 的工具链(Windows 推荐 w64devkit 解压即用),进任意目录make、跑./app.exe看输出、make clean清理。六个工程看懂后,把自己的项目源码套进 04-depfiles 的模板,就是一个够用多年的通用 Makefile。

📦 本文对应的 6 个递进工程源码已整理上传:点击查看资源包

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

swiftui-ui-patterns - focus

焦点处理与字段串联 意图 使用 FocusState 控制键盘焦点、串联字段&#xff0c;并在复杂表单中协调焦点。 核心模式 使用枚举表示可聚焦的字段。在 onAppear 中设置初始焦点。使用 .onSubmit 将焦点移动到下一个字段。对于动态字段列表&#xff0c;使用带关联值的枚举&#xff…

作者头像 李华
网站建设 2026/10/10 6:00:19

【计算机毕业设计单片机案例】基于单片机的室内气压烟雾颗粒物检测与移动端远程提醒控制系统设计 基于单片机的本地与移动端协同管理多环境参数监测报警装置设计(030110)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/10/10 5:59:13

局域网内 Docker 部署 DeepSeek AI Agent 平台实战

1. 为什么要在局域网里自建 AI Agent 平台很多人第一次接触大模型&#xff0c;习惯直接开个网页版用。但真到团队协作、数据敏感、或者需要把 AI 能力嵌进内部工具链的时候&#xff0c;网页版就明显不够用了。你没法控制它的上下文长度&#xff0c;没法接自己的知识库&#xff…

作者头像 李华
网站建设 2026/10/10 5:58:26

Java工程师面试答疑:从背八股文到讲原理与取舍

见过太多简历写“熟悉Java、熟悉Spring、熟悉Redis”的候选人&#xff0c;一到追问环节就开始支支吾吾。前阵子有位读者“谢飞机”找我做面试答疑&#xff0c;他准备冲击互联网大厂Java工程师岗位&#xff0c;学历背景不算亮眼&#xff0c;项目经历也偏中小厂&#xff0c;典型的…

作者头像 李华
网站建设 2026/10/10 5:57:19

Marvell88Q5152交换机开发(10)-项目开发问题(一)

问题 问题:TCAM做doubletag过滤,当外标签时0x88A8时无法击中TCAM的规则。 如上图所示配置一个TCAM的黑名单,frame type=0(normal);outerTag=0x88A8,innerTag=0x8100/0x9100/任意,当收到的报文符合这个规则就Drop丢弃。 补充:每个port口有四个TCAM击中计数器,如果报…

作者头像 李华
网站建设 2026/10/10 5:57:06

Claude记忆增强实践:构建可寻址、可回溯的对话状态管理方案

1. “claude-mem”不是官方产品&#xff0c;而是一类社区自发构建的记忆增强实践最近在多个技术社区和开发者讨论组里&#xff0c;“claude-mem”这个词频繁出现&#xff0c;常和“Claude 3.5 Sonnet”“记忆持久化”“上下文断裂修复”“长对话状态保持”等短语一起被提及。它…

作者头像 李华