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

Linux自动化构建工具Make/Makefile

make是一个命令 makefile是一个文件

touch 创建并用vim打开makefile

写入依赖对象和依赖方法 

mycode是目标文件

第二行数依赖方法 以tab键开头

 

make

makefile原理 

 makefile中写的是依赖关系和依赖方法

 

 clean英语清理文件 后不用加源文件。.PHONY定义clean是伪目标。

 

 make只能make一次

 被修饰为伪目标的clean总是被执行。

 

mycode不设为伪目标时,系统怎么知道它已经被编译了?

通过mycode.c的Modify时间是否比mycode的Modify时间早。

.PHONY设置伪目标可以多次执行的原理就是忽略时间先后实现的。

 Modify是内容修改时间,Change是属性修改时间。

 更改属性。只更改属性时间

 

 更改内容,属性也更改。因为大小改变。

 access时间随机改变

touch mycode.c能更改mycode.c的更改时间。

make默认只执行第一个目标文件。

Makefile推导规则

 .c预处理变.i .i编译变成.s .s经过汇编变成.o .o经过链接形成可执行。

依赖关系列表。

 先执行最后一条语句。

 进度条程序

预备知识:

缓冲区:

会先等2秒再显示

原因是数据先存储在了缓冲区。

可以使用fflush先把内容显示出来。 

 

 \n是行缓冲,会直接显示。

回车换行

\r \n

使用\r在同一地方打印,使用fflush解决\r缓冲区不刷新问题。

 

%2d防止到9时显示90.

没有makefile ls>自动创建 

 

 makefile中不用加process.h process.h在同一个文件中 头文件默认在当前路径和库路径中搜索。

 

 

 

 

 

process.h

#pragma once                                                                                                                                                        2 #include<stdio.h>3 #include<string.h>4 #include<unistd.h>5  #define NUM 1016 #define STYLE '#'7 void ProcessOn();

 process.c

1 #include"process.h"2 3 void ProcessOn()4 {5  6   int cnt=0;7   char bar[NUM];8   memset(bar,'\0',sizeof(bar));9   const char* label="|/-\\";10   while(cnt<=100)11   {12       printf("[%-100s][%d%%][%c]\r",bar,cnt,label[cnt%4]);                                                                                                          13       fflush(stdout);14       bar[cnt++]='#';15       usleep(50000);                                                                                                                                      16   }                                                                                  17   printf("\n");                                      18                                       19 } 

 快速更改风格:

 

 

 

 

http://www.lryc.cn/news/454036.html

相关文章:

  • 自动驾驶系列—智能驾驶中的“换挡革命”:线控换挡技术详解
  • .mallox勒索病毒肆虐:了解它的危害与防范措施
  • 如何使用ssm实现基于Java的民宿预订管理系统的设计与实现
  • 光伏组件模型模板在SketchUp中如何完成成模数化设计?
  • 常用组件详解(十):保存与加载模型、检查点机制的使用
  • 基于SpringBoot+Vue+MySQL的在线学习交流平台
  • 前端开发在AI时代如何保持核心竞争力
  • ffmpeg面向对象——拉流协议匹配机制探索
  • R语言绘制柱状图
  • GNU/Linux - tarball文件介绍介绍
  • AppointmentController
  • 网站建设完成后,切勿让公司官网成为摆设
  • 独孤思维:闲得蛋疼才去做副业
  • vulnhub靶场之hackablell
  • 《浔川社团官方通报 —— 为何明确 10 月 2 日上线的浔川 AI 翻译 v3.0 再次被告知延迟上线》
  • 加密与安全_HOTP一次性密码生成算法
  • ResNet18果蔬图像识别分类
  • 深度强化学习中收敛图的横坐标是steps还是episode?
  • 一个真实可用的登录界面!
  • Vue中watch监听属性的一些应用总结
  • MongoDB-aggregate流式计算:带条件的关联查询使用案例分析
  • Redis数据库与GO(一):安装,string,hash
  • expressjs,实现上传图片,返回图片链接
  • 爬虫——XPath基本用法
  • 常见排序算法汇总
  • Golang | Leetcode Golang题解之第459题重复的子字符串
  • 0.计网和操作系统
  • 探索Prompt Engineering:开启大型语言模型潜力的钥匙
  • 滚雪球学Oracle[3.3讲]:数据定义语言(DDL)
  • ssrf学习(ctfhub靶场)