小工具知识网

当前位置: 首页 > 行业知识 > 【Linux】自动化构建工具make/Makefile和git介绍

行业知识

【Linux】自动化构建工具make/Makefile和git介绍

2026-11-11 03:30:43 来源:互联网转载

   个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html

目录

前言

 Linux项目自动化构建工具-make/Makefile

举例

 .PHONY

常见符号

 依赖关系实例 

 Linux第一个小程序-进度条

缓冲区​编辑

 进度条版本1(直接显示)

 版本2(下载场景)

Main.c

 Processbar.c

 Processbar.h

使用 git 命令行

安装 git 

 使用 Gitee 创建项目

 拉取

​编辑​编辑

本地传到远程

 过程解释

修改内容


前言

     hello! 各位铁子们大家好哇。

             今日更新了Linux的make和git的内容

     欢迎大家关注点赞收藏⭐️留言

 Linux项目自动化构建工具-make/Makefile

 make是一个命令工具,是一个解释makefile中指令的命令工具,make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

举例

依赖文件列表以空格进行分割,依赖文件列表可以为空,如上方的clean。上方直接使用make,为什么会执行第一对依赖关系呢?因为如果make后面什么都不跟,就会默认执行第一对依赖关系。make是从上往下执行的。

 .PHONY

格式: .PHONY:XXX    作用:修饰后XXX对应的方法总是要被执行的。

上方make使用一次后就不能继续使用了,是因为此时生成的可执行程序已经是最新的了,不需要更新。如果这里的目标文件也被,PHONY修饰,也可以一直执行。

这里的更新实际是对比可执行文件和源文件的各自的最近修改时间,如果可执行文件最新,就不会编译,如果源文件最新,就会重新编译(即新旧时间的对比)。

常见符号

 $@是指取目标文件,$^是指取依赖文件列表。$的作用是取符号的内容。

 

vim里面也可以定义变量的。直接用=号,两边不要空格 。这里的定义变量就相当于c语言里的宏一样,可以进行替换。

@符号的作用:在外面执行指令时,不会打印出依赖方法 。

 一对依赖关系不止只有一个依赖方法。如上图,还可以发现,echo打印的语句里面$(src)也会被进行替换。

 依赖关系实例 

在makefile里面,注释是用 #。  make指令原本只会执行第一对依赖关系,但是上面例子却把后面的几对依赖关系都执行了。

原理:

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件,并把这个文件作为最终的目标文件。
  3. 如果该文件不存在,他就会执行后面所定义的命令来生成这个文件。
  4. 如果所依赖的code.o文件不存在,那么make会在当前文件中找目标为code.o文件的依赖性,如果找到则再根据那一个规则生成code.o文件。(这有点像一个堆栈的过程)
  5. 然后再用 code.o 文件声明 make的终极任务,也就是执行文件cod.exe了。
  • make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  • 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错, 而对于所定义的命令的错误,或是编译不成功,make根本不理。

    上面除了第一对依赖关系不能改变位置,因为他是终极任务,后面几对依赖关系的顺序可以随便换。

     Linux第一个小程序-进度条

    缓冲区

    运行可执行程序后,发现打印完成后,会停留3秒然后才显示下一个命令行。 

    当我们把’\n"去掉后,发现运行时,会先停留3秒,然后才会打印。 这是因为此时要打印的内容都在缓冲区里面。程序结束的时候,一般会自动冲刷缓冲区。

     

     如果把"\n"放到中间,就会先打印包括\n的前面的内容,休眠3秒后再打印后面的内容。

    冲刷缓冲区有三种方法:

    1. \n
    2. 缓冲区满了
    3. 强制刷新:fflush 

    stdout就是显示器的意思。缓冲区是以行刷新的,如果不想换行,就可以用fflush刷新。 

     

    上面是打印倒计时的程序,不过在运行时,为什么不会进行打印呢?因为\r会让光标回到行首,光标指的地方,内容就被覆盖了,下图是在VS中测试的结果,此时光标在3的位置,3就被覆盖了,无法打印出来。

    我们只需要fflush强制冲刷缓冲区就可以解决了。 

     

    如果我们把倒计时从10开始,会发现打印时后面会多一个0。因为我们打印时,打印的是字符,光标没有移动到后面,就不会把10后面的0覆盖掉。只需要在%后面加上-2即可,如下图:

     进度条版本1(直接显示)

     版本2(下载场景)

    Main.c

    #include "Processbar.h"double bandwidth=1024*1024*1.0;//donwloadvoid download(double filesize,callback_t cb){  double current=0.0;  printf("download begin,current:%lf\n",current);  while(current

上一篇:渲染服务器怎么设置?

下一篇:揭秘北京时间源代码,探寻时间的神秘面纱!