news 2026/5/30 13:29:38

20251127 - Makefile通用文件详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
20251127 - Makefile通用文件详解
# --------------------------------------------------- # 1. 变量定义 # --------------------------------------------------- # 目标文件列表 objs := main.o sub.o # 依赖文件列表 (先假定名称,用于生成 wildcard 搜索列表) dep_files_list := $(patsubst %.o, .%.o.d, $(objs)) # 实际存在的依赖文件 (用于 include) # 注意:使用 new_dep_files 避免覆盖原 dep_files_list new_dep_files := $(wildcard $(dep_files_list)) # --------------------------------------------------- # 2. 默认目标 (链接) # --------------------------------------------------- test : $(objs) gcc -o test $^ # --------------------------------------------------- # 3. 模式规则 (编译与依赖生成) # --------------------------------------------------- # 修正了 -Wp,-MD 错误,使用更规范的 -MD -MF 格式 %.o : %.c gcc -c -o $@ $< -MD -MF .$@.d # --------------------------------------------------- # 4. 依赖文件包含 (核心) # --------------------------------------------------- ifneq ($(new_dep_files),) include $(new_dep_files) endif # --------------------------------------------------- # 5. 清理目标 # --------------------------------------------------- .PHONY: clean distclean clean: # 仅删除目标文件和可执行文件 rm -f test $(objs) distclean: # 删除所有编译结果和依赖文件 (更彻底的清理) rm -f test $(objs) $(actual_dep_files)

这是一个非常高质量的Makefile模板,它实现了自动依赖追踪模块化编译。下面我将逐行详细解释。

💻 Makefile 逐行详解

1. 变量定义部分

行号代码解释
1-3# ----------------...注释行,用于组织Makefile结构。
4objs := main.o sub.o定义目标文件列表。使用即时变量:=定义了最终链接所需的.o文件。
5-6# 依赖文件列表...注释行。
7dep_files_list := $(patsubst %.o, .%.o.d, $(objs))生成依赖文件名称列表。使用patsubst函数对$(objs)列表中的每一个元素进行模式替换:将所有的.o替换为.o.d,并在前面加一个点(.)。结果:dep_files_list的值为.main.o.d .sub.o.d
8-9# 实际存在的...注释行。
10new_dep_files := $(wildcard $(dep_files_list))查找已存在的依赖文件。使用wildcard函数在文件系统中搜索dep_files_list中列出的所有文件。目的:确保只include那些已经被gcc实际生成的.d文件,避免make在第一次运行时因为文件不存在而报错。

2. 默认目标(链接)

行号代码解释
13test : $(objs)目标和依赖。定义最终目标test,它依赖于变量$(objs)中的所有.o文件(即main.osub.o)。
14gcc -o test $^链接命令。使用gcc将所有依赖文件($^代表所有依赖,即main.o sub.o)链接成名为test的可执行文件。

3. 模式规则(编译与依赖生成)—核心

行号代码解释
17%.o : %.c模式规则。定义了如何从任何一个.c文件(如main.c)生成对应的.o文件(如main.o)。
18gcc -c -o $@ $< -MD -MF .$@.d编译命令。这是实现自动依赖追踪的关键命令: *gcc -c -o $@ $<:正常的编译命令。$@是目标文件(如main.o),$<是第一个依赖文件(如main.c)。 *-MD:指示 GCC在编译的同时生成依赖关系列表。 *-MF .$@.d:指示 GCC 将生成的依赖关系列表写入到指定的文件中。.$@.d展开后是.main.o.d.sub.o.d

4. 依赖文件包含(核心)

行号代码解释
22ifneq ($(new_dep_files),)条件判断。检查变量$(new_dep_files)是否不为空。只有当至少有一个.d文件存在时,才执行包含操作。
23include $(new_dep_files)包含依赖。如果.d文件存在,make会将这些.d文件的内容读入并作为Makefile的一部分来处理。这些文件包含了诸如main.o: main.c sub.h这样的规则。
24endif结束条件判断。

5. 清理目标

行号代码解释
27.PHONY: clean distclean伪目标声明。声明cleandistclean不是实际文件名,而是动作,确保它们能够可靠执行。
30clean:目标。删除编译结果(.otest可执行文件)。
31rm -f test $(objs)命令。仅删除可执行文件test和所有目标文件$(objs)
33distclean:目标。更彻底的清理。
34rm -f test $(objs) $(actual_dep_files)命令。删除所有编译结果(test.o文件)以及自动生成的依赖文件.d文件)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 18:39:13

揭秘Open-AutoGLM收益查询黑科技:3步实现自动化收益追踪

第一章&#xff1a;揭秘Open-AutoGLM收益查询黑科技&#xff1a;3步实现自动化收益追踪在数字资产管理日益复杂的今天&#xff0c;高效追踪收益成为开发者与投资者的核心需求。Open-AutoGLM 作为一款基于大语言模型的自动化工具&#xff0c;提供了精准、低延迟的收益数据抓取与…

作者头像 李华
网站建设 2026/5/29 6:22:15

为什么顶级政务部门都在悄悄部署Open-AutoGLM?(内部技术白皮书流出)

第一章&#xff1a;Open-AutoGLM在政务场景中的战略定位Open-AutoGLM作为新一代开源自动化生成语言模型&#xff0c;正逐步成为政务智能化转型的核心支撑技术。其在政策解读、公文生成、智能问答与跨部门协同等关键场景中展现出强大的适应性与扩展能力&#xff0c;为构建高效、…

作者头像 李华
网站建设 2026/5/29 2:17:34

公积金提取太慢?Open-AutoGLM智能引擎提速9倍,你试过了吗?

第一章&#xff1a;公积金提取太慢&#xff1f;Open-AutoGLM智能引擎提速9倍&#xff0c;你试过了吗&#xff1f;在传统政务系统中&#xff0c;公积金提取流程常因人工审核、多级审批和数据孤岛问题导致处理周期长达7天以上。Open-AutoGLM 是一款基于大模型自动化决策的智能引擎…

作者头像 李华
网站建设 2026/5/29 23:28:29

计算机毕业设计springboot基于微信小程序的校园招聘系统 基于微信小程序的校园招聘管理系统设计与实现 SpringBoot框架下微信小程序校园招聘系统开发与应用

计算机毕业设计springboot基于微信小程序的校园招聘系统t71ls9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着数字化技术的飞速发展&#xff0c;校园招聘管理逐渐从传统的线…

作者头像 李华
网站建设 2026/5/29 1:23:33

揭秘Open-AutoGLM校园服务引擎:如何实现99.9%可用性的智能调度?

第一章&#xff1a;Open-AutoGLM校园服务引擎概述Open-AutoGLM 是一款专为高校场景设计的智能服务引擎&#xff0c;融合了大语言模型&#xff08;LLM&#xff09;能力与自动化流程控制机制&#xff0c;旨在提升校园管理效率、优化师生服务体验。该引擎基于 GLM 架构进行深度定制…

作者头像 李华
网站建设 2026/5/24 18:39:05

好写作AI:你的论文为什么越改越差?当心陷入“AI修改陷阱”

你有没有经历过这样的绝望循环&#xff1f;收到修改意见后&#xff0c;你让AI“让这段表述更学术”——它照做了。但接着&#xff0c;导师又说“理论深度不够”&#xff0c;你再次求助AI“加强理论深度”——它又生成一版。几轮下来&#xff0c;那段文字变得臃肿、矛盾&#xf…

作者头像 李华