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

Linux基本开发工具:make和makefile的使用

发布时间:2026/11/4 6:47:27 来源:云帆数科 栏目:资讯中心
Linux基本开发工具:make和makefile的使用
目录一.认识make和makefile1.1背景1.2如何理解make和makefile1.3基本使用1.4推导过程1.5适度扩展语法一.认识make和makefile1.1背景会不会写makefile从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。make是一个命令工具是一个解释makefile中指令的命令工具一般来说大多数的IDE都有这个命令比如Delphi的makeVisual C的nmakeLinux下GNU的make。可见makefile都成为了一种在工程方面的编译方法。make是一条命令makefile是一个文件两个搭配使用完成项目自动化构建。1.2如何理解make和makefile概念Makefile是一个文本配置文件里面写好编译规则、依赖关系记录项目中文件之间依赖、编译顺序、执行命令。makeLinux 下的命令工具用来读取、解析 Makefile 文件按照规则自动化编译项目。一句话make是工具程序Makefile是它读的脚本文件两者配合完成项目自动化构建编译。解决什么问题大型 C 项目有大量.c源文件如果每次手动敲 gcc 命令文件很多命令很长敲写麻烦修改一个.c全部文件都要重新编译速度慢Makefile 会记录文件依赖关系如果 A 文件依赖 B 文件B 修改了才重新编译 AB 没改动就跳过编译。只编译发生改动的文件不必全部重编译提升编译速度。1.3基本使用依赖关系上面的文件 test, 它依赖 test.c依赖方法gcc -o test taet.c, 就是与之对应的依赖关系为什么不用直接写 gcc要用 make直接敲 gcc 适合小文件大型工程文件数量多手写 gcc 命令繁琐易错。make 读取 Makefile根据文件时间戳 依赖关系只编译被修改过的文件不用全部重编译实现自动化构建提升效率。为什么编译用 make删除用 make cleanmake找目标文件test比对依赖源文件 (test.c) 时间戳执行编译生成可执行程序。clean 是伪目标一般不会生成名叫 clean 的文件专门写删除清理的 shell 命令用来删掉编译产物。为什么 make 编译只执行一次make clean 可以反复执行make 编译目标是test。只要test文件存在并且依赖的test.c没有更新时间戳对比后认为不需要重新生成提示is up to date不会重复执行 gcc。clean 伪目标不会生成 clean 这个文件。每次执行make clean没有文件用来比对时间戳所以每次都会执行里面的rm -f test命令可以执行多次。补充知识点伪目标.PHONY: clean声明 clean 为伪目标避免当前目录恰巧存在名为 clean 的普通文件导致 make clean 失效。什么叫总是被执行1.4推导过程make是如何工作的make是如何工作的,在默认的方式下也就是我们只输入make命令。那么make会在当前目录下找名字叫“Makefile”或“makefile”的文件。如果找到它会找文件中的第一个目标文件target在上面的例子中他会找到myproc这个文件并把这个文件作为最终的目标文件。如果myproc文件不存在或是myproc所依赖的后面的myproc.o文件的文件修改时间要比myproc这个文件新可以用touch测试那么他就会执行后面所定义的命令来生成myproc这个文件。如果myproc所依赖的myproc.o文件不存在那么make会在当前文件中找目标为myproc.o文件的依赖性如果找到则再根据那一个规则生成myproc.o文件。这有点像一个堆栈的过程当然你的C文件和H文件是存在的啦于是make会生成myproc.o文件然后再用myproc.o文件声明make的终极任务也就是执行文件hello了。这就是整个make的依赖性make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件。在找寻的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错而对于所定义的命令的错误或是编译不成功make根本不理。make只管文件的依赖性即如果在我找了依赖关系之后冒号后面的文件还是不在那么对不起我就不工作啦。1.5适度扩展语法

相关推荐

(BPPM)查询VIOS的linkspeed
(BPPM)查询VIOS的linkspeed

VIOS linkspeed SQLselect distinct c.moinstid,devicename,targetip,instname,linkspeed from "_PATROL__MS__15_CFG_VIEW" c,"_PATROL__MS__15_ST_VIEW" s where c.moinstids.moinstid and s.linkspeed10 order by devicename,instname · 2026/11/4 6:46:27

谁在占满你的带宽?bandwhich 终端带宽监控快速上手指南
谁在占满你的带宽?bandwhich 终端带宽监控快速上手指南

谁在占满你的带宽?bandwhich 终端带宽监控快速上手指南 【免费下载链接】bandwhich Terminal bandwidth utilization tool 项目地址: https://gitcode.com/gh_mirrors/ba/bandwhich 网速突然慢下来,你 ifstat 一看总吞吐被拉满,却完全… · 2026/11/4 6:46:27

具身智能创新架构解析(7):TVA-EIS跨协议适配的核心技术原理研究
具身智能创新架构解析(7):TVA-EIS跨协议适配的核心技术原理研究

前沿技术探索:TVA智能体(简称TVA) TVA智能体(Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构… · 2026/11/4 6:46:27

PostgreSQL性能调优实战:从容量规划到高级优化
PostgreSQL性能调优实战:从容量规划到高级优化

1. 数据库性能调优的本质思考 第一次接触PostgreSQL性能优化时,我犯了个典型错误——盲目调整配置参数。直到某次生产事故后我才明白,真正的性能调优必须从容量规划开始。就像盖房子要先打地基,数据库性能的根基就在于合理的容量设计。 Post… · 2026/11/4 18:30:52

实时推荐系统架构设计与Flink流批一体实践
实时推荐系统架构设计与Flink流批一体实践

1. 项目背景与核心价值最近几年推荐系统已经从批量更新进化到实时响应的时代。我去年接手的一个电商项目就深刻印证了这一点——当我们将推荐延迟从小时级降到秒级时,转化率直接提升了28%。这种实时性需求催生了新一代流式计算架构的兴起,而AI原生&#… · 2026/11/4 18:30:52

Jev模型两周生态爆发:28个开源项目与TypeSafe AI实践指南
Jev模型两周生态爆发:28个开源项目与TypeSafe AI实践指南

1. 从“Jev 火了两周”说起:一个模型如何带出一整片开源生态Jev 这个名字,最近两周在开发者圈子里出现的频率高得有点离谱。我最早是在几个技术群里看到有人讨论“jev 模型开源吗”“jev 怎么接入”,当时没太在意,以为又是一个昙花… · 2026/11/4 18:30:52

JVM网络类加载器原理与实现详解
JVM网络类加载器原理与实现详解

1. 项目概述作为一名在JVM领域摸爬滚打多年的老码农,我至今还记得第一次实现网络类加载器时踩过的那些坑。那是在2015年做一个分布式插件系统时,需要从远程服务器动态加载插件类。当时天真的以为直接覆盖loadClass方法就能搞定,结果系统核心类… · 2026/11/4 18:30:52

三大AI模型3D游戏开发实测:Step 5、DeepSeek V4 Pro、GLM5.3谁更强?
三大AI模型3D游戏开发实测:Step 5、DeepSeek V4 Pro、GLM5.3谁更强?

1. 三款模型同台做3D游戏,我为什么选这个题最近圈子里讨论度最高的几件事,一个是 Step 5 Preview 的实测表现,一个是 DeepSeek V4 Pro 在代码任务上的稳定性,还有一个是 GLM5.3 在长上下文和工具调用上的进步。单独测某一个模型写… · 2026/11/4 18:30:51

直流无刷电机AX BY CZ三相绕组划分:并非垂直轴线,而是槽位与电角度
直流无刷电机AX BY CZ三相绕组划分:并非垂直轴线,而是槽位与电角度

说真的,第一次看到"直流无刷电机ax by cz怎么划分的,是按照垂直轴线划分的么"这个搜索问题的时候,我愣了好几秒。因为"ax by cz"这副长相实在太像中学数学里的平面方程了,怎么想都跟电机扯不上关系。可它既然… · 2026/11/4 18:29:51

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

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

企业微信二维码