【linux】2 make/Makefile和gitee

news2024/11/19 16:46:21

文章目录

  • 一、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 101
  5 #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.coloradmin.cn/o/927845.html

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

相关文章

十一、pikachu之XXE

文章目录 1、XXE漏洞概述1.1 XML定义1.2 XML结果1.2 XML文档格式1.2.1 DTD内部文档声明1.2.2 DTD外部文档声明1.2.3 DTD声明 2、实战 1、XXE漏洞概述 XXE(xml external entity injection)&#xff1a;即xml外部实体注入漏洞&#xff0c;也就是说服务端接收和解析了来自用户端的…

我裸辞去面试大公司python岗位了!

最近换工作了&#xff0c;坐标上海&#xff0c;裸辞&#xff0c;之前早有前辈们说过&#xff0c;“裸辞一时爽,一直裸辞一直爽”&#xff0c;这话一点不假&#xff0c;裸辞你要面临没有收入来源&#xff0c;但是每天眼睁睁看着各种花销不断支出的煎熬&#xff0c;我主要是觉得一…

高忆管理:k线图24种经典图解?

K线图是股市技能剖析中的常用工具&#xff0c;它可以描绘出一段时间内股票或指数的开盘价、收盘价、最高价和最低价等信息&#xff0c;为投资者提供了重要的信息。在这篇文章中&#xff0c;咱们将从多个角度剖析24种经典的K线图&#xff0c;协助读者深入了解和应用它们。 榜首&…

stm32基于HAL库驱动外部SPI flash制作虚拟U盘

stm32基于HAL库驱动外部SPI flash制作虚拟U盘 &#x1f4cc;参考文章&#xff1a;https://xiaozhuanlan.com/topic/6058234791&#x1f39e;实现效果演示&#xff1a; &#x1f516;上图中的读到的FLASH_ID所指的是针对不同容量&#xff0c;所对应的ID。 //W25X/Q不同容量对应…

(五)k8s实战-配置管理

一、ConfigMap 使用 kubectl create configmap -h 查看示例&#xff0c;构建 configmap 对象 1) 基于文件夹&#xff0c;加载文件夹下所有配置文件&#xff0c;创建 kubectl create configmap <configmapName> --from-file<dirPath>2) 指定配置文件&#xff0c;创…

vue3的hooks你可以了解一下

更详细的hooks了解参考这个大佬的文章&#xff1a;掘金&#xff1a;Hooks和Mixins之间的区别 刚开始我简单看了几篇文章感觉Hooks这个东西很普通&#xff0c;甚至感觉还不如vue2的mixin好用。还有export import 感觉和普通定义一个utils文件使用没什么区别。但是Hooks这个东西肯…

vue学习 记录

vue学习 记录 https://v2.cn.vuejs.org/ https://cn.vuejs.org/ https://chrome.zzzmh.cn/index#/index 更多工具— 扩展程序

VLOOKUP

VLOOKUP简单应用 VLOOKUP(A1,B:B,1,FALSE) 是查询A1这子格子的数据在B这一列里面有没有找到相同数据的值,如果有的话就放在当前格子里面去 如果没有的话就是#NA VLOOKUP(A1,F:G,2,FALSE) 是查询A1这子格子的数据在F列查相同的数据,然后再取G列这一行后面的这个格子的数据放到…

连锁餐饮行业的运维困局,向日葵远程控制提供“标准答案”

企业数字化转型的应用落地&#xff0c;在连锁餐饮行业是非常容易被顾客所感知到的&#xff0c;最典型的例子就是各种自助点餐设备。 往往在这些自助点餐设备的背后&#xff0c;还拥有一个覆盖进销存管理、供应链、客户反馈、巡店管理、视频监控等方面的完善的数字化系统&#…

VR全景加盟会遇到哪些问题?全景平台会提供什么?

想创业&#xff0c;你是否也遇到这些问题呢&#xff1f;我是外行怎么办&#xff1f;没有团队怎么办&#xff1f;项目回本周期快吗&#xff1f;项目靠谱吗&#xff1f;加盟平台可信吗&#xff1f;等等这类疑问。近几年&#xff0c;VR产业发展迅速&#xff0c;尤其是VR全景项目在…

分布式事务篇-1 分布式事务介绍

文章目录 前言一、分布式事务是什么&#xff1f;二、分布式事务的理论基础&#xff1a;2.1. CAP定理&#xff1a;2.1.1 CAP定理介绍&#xff1a;2.1.2 AP VS CP&#xff1a;2.1.3 CAP 定理的误解&#xff1a; 2.2. Base 理论&#xff1a;2.3. CAP定理和BASE理论的关系&#xff…

Java语言请求api接口1688阿里巴巴电商平台按关键字搜索商品示例说明

关键词搜索商品API接口在电商平台中具有重要的作用。以下是该API接口的一些重要性&#xff1a; 提供精准搜索&#xff1a;关键词搜索商品API接口可以根据用户输入的关键词&#xff0c;快速准确地匹配出符合用户需求的商品。这样可以节省用户在浏览商品时的时间和精力&#xff…

Sql Server导出数据库到另一个数据库

1.打开sql server数据库&#xff0c;连接到服务器后&#xff0c;找到需要导出的数据库&#xff0c;右击后选择 任务->导出数据。 2.点击 下一步。 3.身份验证可以使用SQL Server身份验证&#xff0c;就是当时建立连接时的用户名和密码&#xff0c;数据库名称使用默认的&…

大数据项目实战(Hadoop集群搭建)

一&#xff0c;搭建大数据集群环境 1.2 Hadoop集群搭建 1.2.1 jdk安装 1.下载jdk (1)在根目录下创建三个子目录以备后用。具体如下&#xff1a; mkdir -p /export/data mkdir -p /export/software mkdir -p /export/servers (2)下载路径&#xff1a; 1、官网下载地址http…

mysql my.ini、登录、用户相关操作、密码管理、权限管理、权限表

my.ini 配置文件格式 登录mysql mysql -h hostname | IP -P port -u username -p database -e “select 语句”&#xff1b; 创建用户、修改用户、删除用户 create user ‘zen’ identified by ‘密码’ ## host 默认是 % create user ‘zen’‘localhost’ identified by ‘密…

SMC_TRAFO_GantryCutter2 (FB) 带刀片旋向龙门

裁布机&#xff1a;刀片按XY走向&#xff0c;偏转刀片角度。 pi&#xff1a;目标位置矢量&#xff08;x&#xff0c;y&#xff09;&#xff0c;插值器的输出 v&#xff1a;当前路径切线的矢量&#xff0c;插值器的输出 dOffsetX&#xff1a; x轴的附加偏移 dOffsetY&#xf…

高效数据传输与管理利器:镭速传输方案助力企业提升效率与安全

随着互联网的迅速发展和普及&#xff0c;企业和机构所拥有的数据类型和数量越来越多。这些数据分布在不同的服务器、数据中心甚至不同的云平台上&#xff0c;导致有效管理和调度变得困难。为解决这一问题&#xff0c;需要一种可靠、自动化且可视化的解决方案&#xff0c;能够实…

《华为认证》交换堆叠介绍

定义 堆叠是指将多台支持堆叠特性的交换机通过堆叠线缆连接在一起&#xff0c;从逻辑上变成一台交换设备&#xff0c;作为一个整体参与数据转发。如图1所示&#xff0c;SwitchA与SwitchB通过堆叠线缆连接后组成堆叠系统。 图1 堆叠示意图 应用场景 提高可靠性 堆叠系统多台成…

C++二叉树进阶

本期内容我们讲解二叉树的进阶知识&#xff0c;没有看过之前内容的小伙伴建议先看往期内容 二叉树-----补充_KLZUQ的博客-CSDN博客 目录 二叉搜索树 代码实现 基础框架 Insert Find Erase 析构函数 拷贝构造 赋值 二叉搜索树的应用 全部代码 二叉搜索树 二叉搜索树…

echarts实现图表标签(label)可拖拽,以及保存拖拽后的位置

需求背景&#xff1a; 当echarts图表中像素点非常多&#xff0c;或者有像素点重合的时候&#xff0c;标签就会被覆盖或者重叠。为了解决这个问题&#xff0c;让用户体验更加友好&#xff0c;于是就实现了对label进行拖拽。用户可以把label拖拽到任何他想要的位置&#xff0c;并…