IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【Linux】Linux项目自动化构建工具-make/Makefile(学习复习兼顾) -> 正文阅读

[系统运维]【Linux】Linux项目自动化构建工具-make/Makefile(学习复习兼顾)

🏠 大家好,我是 兔7 ,一位努力学习C++的博主~💬

🍑 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀

🚀 如有不懂,可以随时向我提问,我会全力讲解~

🔥 如果感觉博主的文章还不错的话,希望大家关注、点赞、收藏三连支持一下博主哦~!

🔥 你们的支持是我创作的动力!

🧸 我相信现在的努力的艰辛,都是为以后的美好最好的见证!

🧸 人的心态决定姿态!

🚀 本文章CSDN首发!

目录

0. 前言

1. 背景

2. 使用

2.1 依赖关系

2.2?原理

2.3?项目清理

3.?Linux小程序-进度条

3.1?\r&&\n

3.2 行缓冲区概念

3.1 缓冲区

4. 进度条代码

5. 使用 git 命令行

5.1?下载项目到本地

5.1.1?三板斧第一招: git add

5.1.2?三板斧第二招: git commit

5.1.3 三板斧第三招: git push

5.2?配置免密码提交


0. 前言

? ? ? ? 如果你没听过或不会用 make/Makefile 就不要说你写过大项目!

????????此博客为博主以后复习的资料,所以大家放心学习,总结的很全面,每段代码都给大家发了出来,大家如果有疑问可以尝试去调试。

????????大家一定要认真看图,图里的文字都是精华,好多的细节都在图中展示、写出来了,所以大家一定要仔细哦~

? ? ? ? 感谢大家对我的支持,感谢大家的喜欢, 兔7 祝大家在学习的路上一路顺利,生活的路上顺心顺意~!

1. 背景

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一 种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

2. 使用

mytest:test.o
    gcc test.o -o mytest
test.o:test.s
    gcc -c test.s -o test.o
test.s:test.i
    gcc -S test.i -o test.s
test.i:test.c
    gcc -E test.c -o test.i
             
.PHONY:clean                                                                               
clean:                                               
    rm -f test.i test.s test.o mytest

?

? ? ? ? 这就通过依赖关系生成了一系列文件:

? ? ? ? 当然这里就有一个小知识了,我们平时在一条命令行中只使用了一条命令,其实还可以执行多个命令,次序也是按照写的顺序去执行,接下来我就展示一下。

2.1 伪目标

? ? ? ? 这里说理论听了也不懂,我直接展示区别就好了:

? ? ? ? 也就是上面说的,伪目标总是被执行,而目标如果更新到最新,就不会重新进行编译。

????????其实将目标设置成伪目标也不是不可以,只是没有意义,如果已经是最新的了,那么就没必要再进行编译生成一份。

2.1 依赖关系

? ? ? ? 上面已经标记的很清楚了,也就是mytest的生成需要依赖下面的步。

????????但是实际中,我们其实不需要写这么多依赖关系。

? ? ? ? 但是在刚开始用的时候最好写全,因为只有你可以写全,你就可以很清楚的理解它们之间的依赖关系。

? ? ? ? 大家认为如果这样写是不是很简洁了,但其实还有更简洁的写法:

? ? ? ? 当然也可以写成下面这样,上面那样写是为了介绍清楚这里的所有用法:

2.2?原理

????????make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“mytest”这个文件,并把这个文件作为最终的目标文件。
  3. 如果hello文件不存在,或是hello所依赖的后面的test.o文件的文件修改时间要比mytest这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。
  4. 如果hello所依赖的test.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)
  5. 当然,你的C文件和H文件是存在的啦,于是make会生成 test.o 文件,然后再用 hello.o 文件声明make的终极任务,也就是执行文件mytest了。
  6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
  8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

2.3?项目清理

  • 工程是需要被清理的。
  • 像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行, 不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。
  • 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。
  • 如果大家有兴趣可以将?mytest 目标文件声明成伪目标,测试一下。

3.?Linux小程序-进度条

3.1?\r&&\n

  • 回车概念
  • 换行概念

3.2 行缓冲区概念

? ? ? ? 大家看看下面的代码运行起来有什么区别:

? ? ? ? 有的小伙伴可能认为有区别,有的可能认为没有,接下来因为图片不是很好解释,我就图片加文字给大家解释清楚:

? ? ? ? 由此可见,加 '\n' 和不加 '\n' 的区别。

? ? ? ? 这时可能有小伙伴感觉很奇怪,我们开始学C语言的时候就知道,代码的执行是从上到下依次执行,那么这里既然等了3秒后再打印的,那么是不是先执行的sleep再执行的printf呢?

? ? ? ? 当然,不是!代码的执行是从上到下依次执行的,这点肯定没有问题,所以也肯定是先执行的printf后执行的sleep,至于为什么先等3秒后打印,这里就涉及到缓冲区的概念了。(当然你们也可以去VS编译器去试试,会有意外收获哦~)

3.1 缓冲区

? ? ? ? 那么我们要想看着是先打印再休眠3秒可不是不可以,我们可以手动刷新缓冲区:

? ? ? ? 那么最开始提到了 '\r' 这个是什么呢?

? ? ? ? 这个 '\r' 是回车,而?'\n' 则是回车换行。

????????1、 '\r' 是使光标回到旧行(当前行)的开头。

? ? ? ? 2、 '\n' 是回车+换行,也就是到当前行的下一行的开头。

? ? ? ? 那如果这里使用? '\r' 会是什么情况呢?

? ? ? ? 我们会发现,不仅没有先打印,而且到最后还不打印了。

? ? ? ? 使用了 '/r' 要是重新写入内容,会将这一行的内容进行覆盖式写入。

? ? ? ? 那么既然会覆盖式写入,那想想我们平时下载时的进度条,是不是与这个原理很相似?

4. 进度条代码

? ? ? ? 在写进度条之前,我们先写一个简单的倒计时:

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 
  4 void Count()
  5 {
  6   int i = 9;
  7   while(i)
  8   {
  9     printf("%d\r",i);
 10     fflush(stdout);
 11     sleep(1);
 12     --i;
 13   }
 14 
 15 }
 16 
 17 int main()
 18 {
 19   Count();                                                                                                                                 
 20   return 0;
 21 }

? ? ? ? 由于博主不会使用gif动画(主要是我找到的gif动画需要会员,要不然他不给我用!),所以就不给大家演示了,这个的效果出来就是倒计时,大家下去可以去试试~

? ? ? ? 如果这样写的话,i大于9以后就会有问题,因为我们只是对第一个字符进行覆盖式写入,但是第二位的字符我们覆盖不到,所以就会出现问题,所以我们只要将打印的规则改为%2d(%-2d)就可以了,因为不足位数的会用空格代替。

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 
  4 void Count()
  5 {
  6   int i = 9;
  7   while(i)
  8   {
  9     printf("%-2d\r",i);
 10     fflush(stdout);
 11     sleep(1);
 12     --i;
 13   }
 14 
 15 }
 16 
 17 int main()
 18 {
 19   Count();                                                                                                                                 
 20   return 0;
 21 }

? ? ? ? 接下来就是写进度条了:

? ? ? ? 首先进度条要用符号来代替运行了多少,也要显示加载到了百分之多少,这两点是必备的。

? ? ? ? 还有一个就是如果进度条停止了,用户可能不知道是电脑死机了还是正在下载中,所以我们要设置一个标识,比方说:设计一个小风扇转圈。让用户知道是正在下载......

 17 void ProcBar()
 18 {
 19   int i = 0;
 20   char proc[102];
 21   memset(proc,'\0',sizeof(proc));
 22   const char* lable = "|/-\\";
 23   while(i <= 100)
 24   {                                                                                                                                        
 25     printf("[%-100s][%d%%][%c]\r",proc,i,lable[i%4]);
 26     fflush(stdout);
 27     proc[i] = '#';
 28     usleep(100000);
 29     i++;
 30   }
 31   printf("\n");
 32 }
 33 
 34 int main()
 35 {
 36   //Count();
 37   ProcBar();
 38   return 0;
 39 }

? ? ? ? 当然这里还是给大家看不了动画版,大家有兴趣,自己下去写一写,然后去看一看,会很有意思的,然后我将运行完后的和运行中的截图了,大家凑合看一看~

5. 使用 git 命令行

5.1?下载项目到本地

创建好一个放置代码的目录。

git clone [url]

????????url 用http的网址,因为很方便使用。

5.1.1?三板斧第一招: git add

git add [文件名]

????????将需要用 git 管理的文件告知 git

5.1.2?三板斧第二招: git commit

????????提交改动到本地

git commit -m '提交日志'

提交的时候应该注明提交日志, 描述改动的详细内容。

5.1.3 三板斧第三招: git push

git push

需要填入用户名密码,也就是登录gitee或者github的账号和密码。

5.2?配置免密码提交

免密码登录

? ? ? ? 这里可以设置免密码登录,当然不是很推荐,因为可能时间一长机会忘记自己的密码,所以还是手动输入为好~

??????????如上就是?Linux项目自动化构建工具-make/Makefile 的所有知识,如果大家喜欢看此文章并且有收获,可以支持下 兔7 ,给?兔7 三连加关注,你的关注是对我最大的鼓励,也是我的创作动力~!

? ? ? ? 再次感谢大家观看,感谢大家支持!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 17:01:55  更:2022-07-17 17:05:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 9:03:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计