当前位置: 首页 > 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.cnnetsun.cn/news/2506419.html

相关文章:

  • Sunshine游戏串流服务器:如何5分钟内搭建私人云游戏平台?
  • 怎么判断一家工厂是纯代工厂还是有自有品牌的工厂?六个外部可识别信号
  • OpenAI 用 AI 大模型推翻离散几何核心猜想,80 年数学难题终获解!
  • [MAF的Agent管道详解-04]如何让LLM按照要求的结构输出数据?
  • Windows AirPods电量显示终极指南:解锁苹果耳机完整功能
  • 如何用茉莉花插件5分钟搞定Zotero中文文献管理:新手终极指南
  • 探索AI-Shoujo HF Patch:解锁游戏完整体验的终极方案
  • 调用外部服务却无监控?这可能是下一个雪崩的源头
  • 5个关键技巧优化抖音素材收集:开源下载器的进阶应用指南
  • 解锁AMD Ryzen处理器隐藏性能:SMUDebugTool深度调试实战指南
  • 家庭总吵架?跟易经学2招,比讲道理管用多了!
  • 低压电工-架空线路,室内线路
  • Android OTA提取终极指南:手机端Payload-Dumper-Android完整教程
  • N_m3u8DL-CLI-SimpleG:让M3U8视频下载变得如此简单的终极图形界面工具
  • 基于知识图谱InsightGraph — 让数据开口说话。
  • 基于零代码平台的学生考勤多维画像及高危群体专项分析实验
  • Sunshine游戏串流服务器:从零搭建你的专属云游戏平台
  • 三周、1.81倍、百亿:中国AI的压制性时刻
  • 真正的爱是接受对方本来的样子
  • SQLite Viewer:3分钟学会在线查看SQLite数据库的终极方案
  • 米哈游游戏字体完整指南:免费获取原神、星穹铁道、绝区零精美文字资源
  • ARMv8 TRCEVENTCTL1R寄存器解析与调试实践
  • Display Driver Uninstaller (DDU) 终极指南:显卡驱动彻底清理的完整解决方案
  • SpaceX与Anthropic达成合作:Anthropic年付150亿美元,SpaceX拟拓展AI计算服务
  • 找工厂用什么工具?为什么“收录企业更多“是个伪指标
  • 5分钟搞定百度网盘限速:baidu-wangpan-parse全功能指南
  • 瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
  • 线上故障排查与应急响应实战:从零开始建立你的SRE体系
  • 原神PC帧率解锁完整指南:轻松突破60FPS限制的终极方案
  • 使用TaotokenCLI工具一键配置开发环境与模型密钥