当前位置: 首页 > news >正文

Linux Make/Makefile基础知识

一,简单了解make/Makefile


使用vim Makefile将会成功的建立一个Makefile文件,前面的Makefile的M实验小写也可以的,但是大多时候前面的M都是使用大写

编写好代码保存退出即可

直接使用make指令,如果没有报错说明没有问题,然后直接执行即可

如果使用了make clean 指令就是把生成的可执行文件myproc删除myproc:myproc.c 为依赖关系
gcc -o myproc myproc.c 为依赖方法
第一条表示生成一个myproc的可执行文件需要依赖一个myproc.c文件
第二条表示生成上面需要生成一个myproc可执行文件需要依赖这条指令
.PHONY 为伪目标
clean 为依赖关系
rm -rf myproc 为依赖方法

第三条为伪目标后面跟的谁表示谁会一直被反复执行(如图 .PHONY:clean 表示clean这一条的依赖关系和依赖方法会一直被反复的重新执行)
第四条clean也表示一个依赖关系(依赖关系也可以不依赖任何文件,表示依赖了一个空文件,意思就是只要执行了clean这个依赖关系,clean小面的依赖方法会立即执行)
第五条为clean的依赖方法,表示执行了clean这个依赖关系将会删除myproc这个可执行文件

注意1:那个依赖关系在文件的最上面make就是执行哪个依赖关系还有属于它的方法,如上图最上面的依赖关系myproc:myproc.c,所以使用make指令会默认执行这个关系myproc:myproc.c还有它的依赖方法gcc -o myproc myproc.c,意思就是立即生成一个myproc的可执行文件,这个谁在最上面的位置是可以人为选择的不是固定的

如图现在把两串代码交换位置保存退出


将会发现make默认执行的的clean的依赖关系还有它的方法,你要使用make创建一个myproc可执行程序需要使用make+myproc(myproc为创建一个可执行文件的依赖关系)

注意2为什么一般情况下为什么编译程序不会加一个伪目标让这个编译程反复的程序编译呢

如图如果一个文件使用make指令编译成功后为什么接着使用make接着编译的时候它不会编译只会输出 myproc is up to date(myproc已经是最新的不需要编译),这是因为如果你的文件小加不加为目标都无所谓,但是如果你的文件很大有上千个,甚至上万个,全部重新编译反而会浪费很多时间,大大的降低了文件的编译效率,所有一般编译程序的那里都不会加一个伪目标


这里只是单纯的帮原来的东西给了变量然后再通过变量来进行相应的定义
$@:最终的目标文件
$^:依赖的文件列表


这个意思是当前目录下的所有的.o和.c文件全部展开


这两个意思是一个意思就是将当前目录下的所有.c文件列出来

这个意思是将列出来的所有.c文件变成.o文件

二,使用make/Makefile其它知识


使用这个Makefile文件

通过这myproc.c文件代码我们可以简单的制作一个简单的倒计时程序,该程序是从9~0,也就是倒数10秒

编译成功我们运行发现这个程序的特点是每输出一个倒计时就会进行一次换行,但是我们想这个代码不会换行,需要这个代码在原来的位置进行倒计时我们就不能让这个代码进行换行我们需要的是回车,我们就不能在后面使用\n,而是使用\r,因为只有\r才能表式回车


然后我们把\n换成\r后重新进行程序的编译和输出就会发现换成了/r这个代码就不会一个一个数字的输出,只有当这个是最后一个数字结束的时候才会进行输出,这是因为这个/r不具备刷新功能,\n是具备刷新功能,\r因为不具备刷新功能,它会把每一个数字方入所谓的输出缓冲区,只有当程序结束的时候才会进行输出最后一个数字,但是\n就会把每一个数字进行刷新和输出那如果我们使用了\r回车又想立即刷新我们需要怎么做,这里我们就要需要知道只要我们使用了printf函数这个系统就会默认打开三个输出流分别是

第一个表示键盘的刷新,后面两个都是表示屏幕的,所以我们只需要使用了\r,在\r后面加一条代码 fflush(stdout)就行了,通过编译运行我们发现是没有问题的,都是如果我们把从9开始倒计时改成从10开始倒计时就会发现

第二的数字永远都不会改变,发生改变的只有第一个数字,第一个数字从1开始然后第二次变成9,然后再从9~0,那如何改变这种行为呢,这个时候我们就要立即显示的规则,如果我们需要屏幕输出123456这个数字,屏幕是输出直接123456这串数字,还是以字符的形式输出如“1”,“2”…很明显屏幕是以字符的形式输出,然后把它们连在一起了,所以大家都觉得是输出123456数字,就是如果你使用一个%d,进行输出如果这个字符是2(本身为02),因为只输出一个字符,系统就会自动输出后面的字符也就是2,所以这里10是字符“1”还有字符“0”,如果要它们正常输出就是要把占位符%d,变成%2d就可以了

就会发现,它变正常了,但是好像发现这个0没有左对齐,因为可以明显的发现这个0前面有一个空格,那如果我们想让它前面没有空格怎么办,这里就需要一个左对齐了,只需要在%2d前面加 - 就行了,就是 -%2d,这就是左对齐


编译运行发现它是没有一点问题的

三,使用make/Makefile制作进度条


制作前需要建立一些新的文件,如图
在里面编辑相应的内容,如图为Makefile
如图为process.h

如图为process.c

如图为main.c

如图把代码编辑好,没有问题的话这就是正常编译的结果

http://www.jsqmd.com/news/863515/

相关文章:

  • 2026最新VSCode安装+配置+使用保姆级教程(附官方安装包)
  • 终极kill-doc指南:一键下载30+文档平台,告别付费墙和登录限制
  • 2026安远县黄金回收白银回收铂金回收店铺实力排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • AI写论文神器来袭!4款AI论文写作工具,让写论文变得超简单!
  • Linux Pulseaudio深度解析之pa_context_set_default_source调用流程与实战(十三)
  • 什么?这竟然是全网最详细的基于docker的openclaw部署教程(体验版)
  • RAG 检索增强生成(全链路)
  • 2026TOP5株洲市天元区黄金,白银,铂金回收门店推荐及联系方式权威发布 - 前途无量YY
  • CVE-2026-9082深度解析:Drupal PostgreSQL高危SQL注入,未认证RCE全流程与防御实战
  • 拆解Agent大模型幻觉问题,分层约束与异常兜底全工程实践
  • Sunshine游戏串流服务器:如何5分钟内搭建私人云游戏平台?
  • 免费商用多语言字体终极指南:思源黑体TTF构建教程
  • 5分钟快速上手:免费在线EPUB编辑器终极指南
  • Cursor释放野心,要造一个Agent开发环境!
  • 2026年成都公司注册代办指南,权威榜单为你揭秘靠谱代办地! - 品牌推荐官方
  • 注意力机制:多头注意力机制、分组查询注意力机制、多查询注意力机制理论+代码
  • Windows Btrfs驱动完全指南:解锁Linux文件系统的7大核心优势
  • 新能源车辆数据处理平台架构
  • 告别克隆整个仓库:GitHub文件精准下载工具使用指南
  • Go 闭包【1】基础
  • 告别焦虑等待!Elsevier投稿状态自动追踪插件,让你的科研进度一目了然
  • 调用外部服务却无监控?这可能是下一个雪崩的源头
  • ContentBranch+CFBranch混合电影推荐模型|全网独家复现,深度学习实战篇 引入双分支融合架构,兼顾内容特征与协同信号、助力冷启动缓解、数据稀疏性优化、推荐精度有效涨点
  • 【硬件面试题精讲】运放求和 + 同相放大电路输出计算(附原理与通用公式)
  • 淘金币自动化脚本:5分钟搞定淘宝每日任务,轻松解放双手
  • 苏州德奥诚汽车服务:太仓靠谱的报废车回收推荐哪几家 - LYL仔仔
  • Go闭包【2】 1.22 对 for 循环里闭包陷阱的那个“史诗级更新”
  • HoRain云--AI 底层架构
  • QQ音乐加密文件终极转换指南:3步将.qmc文件转为MP3/FLAC
  • 达梦数据库-堆栈看问题-01-asmapi_asm_extent_load