【linux】2 make/Makefile和gitee

文章目录

  • 一、Linux项目自动化构建工具-make/Makefile
    • 1.1 背景
    • 1.2 实例代码
    • 1.3 原理
    • 1.4 项目清理
  • 二、linux下第一个小程序-进度条
    • 2.1 行缓冲区
    • 2.2 进度条
  • 三、git以及gitee
  • 总结


ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ"


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

1.1 背景

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

makefile: 在当前路径下的一个普通文件

  1. 依赖关系
  2. 依赖方法

1.2 实例代码

在这里插入图片描述
在命令行输入make,编译器就会生成可执行文件。

目的:形成可执行文件【就要有依赖关系和依赖方法】
依赖关系
上面的文件 hello ,它依赖 hello.o
hello.o , 它依赖 hello.s
hello.s , 它依赖 hello.i
hello.i , 它依赖 hello.c
依赖方法
gcc hello.* -option hello.* ,就是与之对应的依赖关系

1.3 原理

多文件的Makefile
三个文件:hello.c hello.h main.c

第一种

  • gcc -o hello main.c hello.c 【因为hello.h在这两个文件中会展开,所以仅仅这两个文件生成可执行程序】
  • ./hello 【运行可执行程序】 rm hello【删除】

第二种

  • touch makefile
  • vim makefile
  • 文件里面内容在这里插入图片描述
  • make
  • make clean

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

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

1.4 项目清理

在这里插入图片描述
输入命令:make clean

  • 工程是需要被清理的
  • 像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。
  • 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。【总是被执行的意思是:无论是目标文件是否新旧,仍然会执行依赖关系的依赖方法】
  • .PHONY 可以当做“Makefile的关键字,修饰的是伪目标。 PHONY:伪目标
  • 当我们make的时候,默认执行的是形成可执行文件,而不是clean,因为默认执行的是第一个依赖关系的依赖方法。
  • 不是.PHONY 修饰,执行方法不是总是被执行的。那么Makefile如何辨别是否是最新的?通过对比源文件和可执行文件的Modify时间 ,来决定是否更新可执行文件。
    在这里插入图片描述

1.修改内容会引起文件属性发生发生变化。
2.Access访问会发生变化【但是linux访问累积到一定次数才会发生变化,因为访问的次数会非常多,经常发生变化,会影响效率】

二、linux下第一个小程序-进度条

2.1 行缓冲区

sleep(x);休眠函数,休眠x秒钟

 #include <stdio.h>2 #include <unistd.h>3 4 int main()5 {6   printf("hello\n");                                                                                                                                7   sleep(2);8   return 0;9 }

在这里插入图片描述
但是hello却是后显示的,因为执行结果在缓冲区,并不是先执行第二条代码。
立马把缓冲区内容显示出来—刷新【行刷新,因为有\n,所以够一行,行刷新,所以就显示了出来】

不想有\n但是却想显示出来,可以刷新stdout
代码展示:

 #include <stdio.h>2 #include <unistd.h>3 4 int main()5 {6   printf("hello");                                                                                                                                  7   fflush(stdout);8   sleep(2);9   return 0;10 }

立马把缓冲区内容显示出来,再睡眠2秒。

换行和回车的概念:
换行:新起一行【光标在上一行最后位置往下移一行。】
回车:光标回到当前行的最开始【仅仅回车\r】
换行+回车:新起一行+光标回到当前行的最开始

2.2 进度条

倒计时程序:

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

进度条代码:
代码展示:

 1 #include <stdio.h>2 #include <string.h>3 #include <unistd.h>//usleep的头文件4 #define Val 1015 #define Style '*'6 7 int main()8 {9   char bar[Val];10   memset(bar, '\0', sizeof(bar));11   const char* lable = "|/-\\";12   int i = 0;13   while(i <= 100)14   {                                                                                                                                                 15     printf("\033[43;34m%-100s\033[0m[%d%%][%c]\r", bar, i, lable[i%4]);16     fflush(stdout);17     usleep(200000);  18     bar[i++] = Style;19   }            20   printf("\n");21   return 0;22 }
~

在这里插入图片描述

  • printf(“\033[43;34m%-100s\033[0m[%d%%][%c]\r”, bar, i, lable[i%4]);
    这里的\033[背景颜色;字体样色 字符串 \033[0m 这是一个固定格式。
    在这里插入图片描述
    注意:test1、clean都要顶格写。

三、git以及gitee

安装git: yum install git

git是什么?
git是一个版本控制器
git什么是版本管理?
第一版,修改完的版本保存【第二版】,保存再次进行改变保存【第三版】……每一个版本都有。就是版本管理
版本控制+网络=git 是一个软件工具 gitee和githup基于git工具,搭建起来的网站
如何使用:
gitee 登录注册
(1)新建仓库,点击复制这个地址
在这里插入图片描述
(2)git clone 地址
(3)git commit -m ‘日志’
此时会出现错误:【因为第一次需要配置用户名和邮箱】
在这里插入图片描述
提交以下代码即可解决:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

(4)git push
就提交到gitee啦~

补充知识:.gitignore 这个文件里面文件后缀是不能提交到gitee的


总结

以上就是今天要讲的内容,本文详细地介绍了Linux项目自动化构建工具-make/Makefile、linux下第一个小程序-进度条、git以及gitee,本文以及软件管理器yum和编辑器vim和Linux编译器-gcc/g++和Linux调试器-gdb详细的介绍了linux下开发工具的使用。希望给友友们带来帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/52266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盛最多水的容器——力扣11

int maxArea(vector<int>& height) {int l=0, r=height.size()

半导体低压热氧工艺中的真空度精密控制解决方案

摘要&#xff1a;在目前的各种半导体材料热氧化工艺中&#xff0c;往往需要对正负压力进行准确控制并对温度变化做出快速的响应&#xff0c;为此本文提出了热氧化工艺的正负压力控制解决方案。解决方案的核心是基于动态平衡法分别对进气和排气流量进行快速调节&#xff0c;具体…

SpringBoot 微人事 职称管理模块(十三)

职称管理前端页面设计 在职称管理页面添加输入框 export default {name: "JobLevelMarna",data(){return{Jl:{name:""}}}}效果图 添加一个下拉框 v-model的值为当前被选中的el-option的 value 属性值 <el-select v-model"Jl.titlelevel" …

Spring cache整合Redis使用介绍

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

【网络教程】如何创建/添加钉钉机器人以及如何获取机器人的Token/Secret

文章目录 创建钉钉机器人添加钉钉机器人获取机器人的Token/Secret相关网站创建钉钉机器人 这里以PC端的操作为例,按照如下操作进行 访问 钉钉开放平台选择机器人选项卡,点击右上角的创建应用,这里会有一个弹窗,我这里选择的是继续使用旧版,如图按照要求填写相关信息创建自…

第六次作业 运维高级 docker容器

1.安装docker服务&#xff0c;配置镜像加速器 卸载旧版本 yum remove docker docker-common docker-selinux docker-engine使用yum源安装 &#xff08;1&#xff09;安装Docker所需要的一些工具包 yum install -y yum-utils&#xff08;2&#xff09; 建立Docker仓库 (映射…

Java——它要求用户输入一个整数(实际上是一个字符串),然后计算该整数的平方值,并将结果输出。

这是一个Java程序&#xff0c;它要求用户输入一个整数&#xff08;实际上是一个字符串&#xff09;&#xff0c;然后计算该整数的平方值&#xff0c;并将结果输出。程序的基本流程如下&#xff1a; 首先&#xff0c;声明并初始化变量data和result&#xff0c;它们的初始值都为…

扁线电机定子转子工艺及自动化装备

售&#xff1a;扁线电机 电驱对标样件 需要请联&#xff1a;shbinzer &#xff08;拆车邦&#xff09; 新能源车电机路线大趋势&#xff0c;自动化装配产线需求迫切永磁同步电机是新能源车驱动电机的主要技术路线。目前新能源车上最广泛应用的类型为永磁同步电机&#xff0c…

W5500-EVB-PICO进行UDP组播数据回环测试(九)

前言 上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试&#xff0c;那么本章我们进行UDP组播数据回环测试。 什么是UDP组播&#xff1f; 组播是主机间一对多的通讯模式&#xff0c; 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将…

如何搭建智能问答FAQ的底层数据基础呢?

搭建智能问答FAQ的底层数据基础是构建一个高效和准确的问答系统的关键。在这篇文章中&#xff0c;我们将探讨如何搭建智能问答FAQ的底层数据基础&#xff0c;并介绍需要注意的几个方面。 一、了解智能问答FAQ的概念和优势 智能问答FAQ是一种基于人工智能技术的问答系统&#…

Android进阶之路 - EditText输入字体自适应

遇到这么一个需求&#xff1a;“控件宽度有限&#xff0c;随着输入内容&#xff0c;动态修改字体大小”&#xff0c;如果是你&#xff0c;只如何来实现&#xff1f;又有几种方式&#xff1f; 嗯&#xff0c;就是这么一个简单的需求&#xff0c;让我记录了俩篇blog Android进阶…

ChatGPT提示与技巧分享:如何作出更好的提示2023年8月

​对ChatGPT的一些酷炫技巧感兴趣吗?这里提供了一些可以帮助你充分利用ChatGPT&#xff0c;成为AI工具专家的技巧。 毫无疑问&#xff0c;ChatGPT是目前最广泛使用的人工智能工具之一。它不仅毫不留情地取代了一些特定领域常用的软件小工具&#xff08;如智能对联、经典语录生…

ESP32应用教程(1)— VL53L3CX距离传感器

文章目录 前言 1 产品概述 1.1 技术规格 1.2 系统框图 1.3 设备引脚分布 2 工作流程 2.1 系统功能描述 2.2 状态机描述 2.3 测距模式说明 3 控制接口 3.1 设备地址 3.2 IC写1个字节数据 3.3 IC读1个字节数据 3.4 IC写多个字节数据 3.5 IC读多个字节数据 3.6 IC…

Nacos配置管理、Feign远程调用、Gateway服务网关

1.Nacos配置管理 1.1.将配置交给Nacos管理的步骤 1.在Nacos中添加配置 Data Id服务名称-环境名称.yaml eg&#xff1a;userservice-dev.yaml 2.引入nacos-config依赖 在user-service服务中&#xff0c;引入nacos-config的客户端依赖 <!--nacos配置管理依赖--> <dep…

Flink、Yarn架构,以Flink on Yarn部署原理详解

Flink、Yarn架构&#xff0c;以Flink on Yarn部署原理详解 Flink 架构概览 Apache Flink是一个开源的分布式流处理框架&#xff0c;它可以处理实时数据流和批处理数据。Flink的架构原理是其实现的基础&#xff0c;架构原理可以分为以下四个部分&#xff1a;JobManager、TaskM…

Linux:LAMP架构与论坛搭建

目录 一、动态资源与语言 二、LAMP 架构的组成 三、CGI和astcgi 3.1CGI​​​​​​ 3.2fastcgi 3.3CGI和fastcgi比较 3.4 PHP 配置 3.5 Opcode语言 四、编译安装Apache http 服务 五、安装论坛 一、动态资源与语言 WEB 资源类型&#xff1a; 静态资源&#xff1a;原…

Qt串口通信学习文档

这是官方文档&#xff0c;我也在学习。 QSerialPort Class | Qt Serial Port 5.15.14https://doc.qt.io/qt-5/qserialport.html

如何将下载的安装包导入PyCharm

1. 下载安装包 这里以pyke为例。下载好之后解压缩&#xff0c;然后放入/Lib/site-packages/pyke-1.1.1 2. 打开PyCharm的终端进行安装 python setup.py install 3. 安装好之后导入即可使用 import pyke

用户端Web自动化测试_L3

目录&#xff1a; 浏览器复用Cookie 复用pageobject设计模式异常自动截图测试用例流程设计电子商务产品实战 1.浏览器复用 复用浏览器简介 为什么要学习复用浏览器&#xff1f; 自动化测试过程中&#xff0c;存在人为介入场景提高调试UI自动化测试脚本效率 复用已有浏览…

牛客网Verilog刷题 | 入门特别版本

文章目录 1、 VL1 输出12、VL2 wire连线3、 VL3 多wire连接4、VL4 反相器5、VL5 与门6、VL6 NOR 门7、VL7 XOR 门8、VL8 逻辑运算10、VL10 逻辑运算211、VL11 多位信号12、VL12 信号顺序调整13、VL13 位运算与逻辑运算14、VL14 对信号按位操作15、VL15 信号级联合并16、VL16 信…