【Linux第三课-基础开发工具的使用】yum、vim、gcc/g++编译器、gdb、Make/Makefile编写、进度条程序、git命令行简单操作

目录

  • yum - 软件包管理器
    • 快速认识yum
    • 快速使用yum
      • yum搜索
      • yum安装
      • yum卸载
    • yum的周边 - yum的整个生态问题
  • vim
    • 快速介绍vim
    • vim的模式
      • 命令模式
      • 插入模式
      • 低行模式
    • 常见模式 -- 命令、低行
      • 命令模式 -- 光标的移动
      • 命令模式 -- 复制粘贴、剪贴、删除
      • 命令模式 -- 小写/大写
      • 替换模式
      • 命令模式 -- 删除
      • 命令模式 -- 查找
      • 低行模式
      • 多窗口的光标移动
      • 批量化注释/去注释
    • 配置问题
    • 解决sudo的白名单
  • gcc/g++
    • 程序的翻译过程及gcc选项
      • 预处理
        • 条件编译
      • 编译
      • 汇编
      • 链接
    • g++
    • 动静态库的理解 -- 链接
      • 动态链接、动态库
    • 静态链接、静态库
  • make/makefile -- 项目自动化构建
    • 快速使用
    • 解释依赖关系和依赖方法
    • 清理项目
    • make的小知识点
    • 认识的文件的时间
    • 补充makefile的语法
      • &@ 、 &^
      • makefile里面的全局变量
      • 关于makefile/make的语法推导
  • 第一个小程序 -- 进度条
    • 预备的两个小知识
      • 缓冲区
      • 回车与换行
    • 入门版的进度条
    • 升级版进度条 -- 设计上

yum - 软件包管理器

快速认识yum

Linux中我们也要进行工具/指令/程序,安装、检查、卸载等,需要yum的软件
安装软件的方式:
1、源代码安装 – 交叉编译的工作
2、rpm包直接安装
3、yum / apt-get
yum是我们Linux上的一条指令,搜索、下载、安装对应的软件
yum相当于是Linux的应用商店!

快速使用yum

yum list //列举yum可以安装的东西

yum搜索

yum list | grep lrzsz

yum安装

yum是先下载再安装

yum install 文件名
yum -y install 文件名

yum卸载

yum remove 文件名

-y:对于一些询问表示yes

yum -y remove 文件名

yum的周边 - yum的整个生态问题

在这里插入图片描述
1、yum如何得知目标服务器的地址和下载链接?
配置文件里面会记录下载的地址

ls /etc/yum.repos.d/

这里面对应的都是yum的本地仓库名
在这里插入图片描述
其中CentOS-Base.repo就是yum源,可以更改yum源
在这里插入图片描述
扩展软件源

yum install -y epel-release

2、云服务器谁提供的?
既得利益者提供的
3、谁提供软件?
大家愿意写的人开发的

vim

写代码:vim
编代码:gcc/g++
调代码:gdb
维护项目结构、自动化编译:make/makefile

快速介绍vim

vim是一款多模式的编辑器,vim里面还有很多的子命令,来进行代码的编写操作
1、进入vim后一般没法写入,需要模式切换,i – insert插入模式
在这里插入图片描述

2、写完后按esc退出插入模式 -> shift+;(也就是:)进入低行模式 -> wq(保存并退出)-> 回车
在这里插入图片描述
3、gcc编译,运行
在这里插入图片描述

vim的模式

在这里插入图片描述

命令模式

插入模式 -> 命令模式:esc

插入模式

命令模式 -> 插入模式 :i/a/o

低行模式

命令模式 -> 低行模式:shift + ;(也就是:)
低行模式 -> 命令模式:esc

常见模式 – 命令、低行

命令模式 – 光标的移动

将光标定位到最右侧结尾处:shift+4($)
将光标定位到最左侧开头处:shift+6(^)
将光标定位到文本的最后一行:shift+g(G)
将光标定位到文本的最开始一行:gg
将光标定位到特定一行,例如第五行:5 shift g
h:左
j:下
k:上
l:右
w:以单词为单位向移动
b:以单词为单位向移动

命令模式 – 复制粘贴、剪贴、删除

n+yy:复制所在行/多行
n+p:在下一行进行粘贴一次/n次
u:撤销编辑操作,undo
ctrl+r:对刚刚的撤销进行撤销
n+dd:删除/剪切当前行/多行
dd、p:剪切

命令模式 – 小写/大写

shift+`(~):大小写快速切换

替换模式

n+r:替换当前光标所在字符/n个字符
shift+r:替换模式
在这里插入图片描述

命令模式 – 删除

n+x:删除光标所在字符/后面n个字符(往后删)
n+shift+x:往前删

命令模式 – 查找

shift+3(#):高亮要查找的函数名
n:下一个查找到的函数名/字符串

低行模式

wq:报存并退出
w!:强制写
q!:强制退出
wq!:强制保存并退出
!指令:可以在低行模式执行shell指令
/搜索的内容:
?搜索的内容
vs 文件名:会形成一个并在旁边对比
set nu:调出行号
set nonu:取消行号
vim test.c 行号:光标直接定位到指定行
shift+zz:保存并退出vim(不建议用)
在这里插入图片描述
光标在哪个窗口就是在编辑哪个窗口
在这里插入图片描述

在这里插入图片描述

多窗口的光标移动

ctrl+ww

批量化注释/去注释

批量化注释
1、ctrl+v:进入VISUAL BLOCK模式
2、按hjkl进行区域选择
3、shift+i:从VISUAL BLOCK模式切换成插入模式
4、//
5、按esc
在这里插入图片描述
批量化去注释
1、ctrl+v:进入VISUAL BLOCK模式
2、hjkl选择区域
3、按d
在这里插入图片描述

配置问题

1、进入用户家目录下
在这里插入图片描述
2、创建.vimrc
在这里插入图片描述
3、vim .vimrc进行配置

set nu               //显示行号
set cursorline       //突出显示当前行
hi Cursorline cterm=bold ctermbg=black ctermfg=green guibg=green   //粗体显示选中行,用黑色框,字体标绿
set cursorcolum      //设置列高亮
set autoindent       //自动缩进
set softtabstop=4    //统一缩进为4
set tabstop=4        //tab缩进为4 
set cindent
set shiftwidth=4
set smartindent      //提供自动缩进
syntax on            //语法高亮 inoremap ' ''<ESC>i  //自动补齐
inoremap " ""<ESC>i
inoremap < <><ESC>i
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {<CR>}<ESC>O

简便配置方法:
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
一定在普通账号下运行

解决sudo的白名单

在这里插入图片描述
在这里插入图片描述
得有root账户改

vim /etc/sudoers

在这里插入图片描述
在这里插入图片描述

gcc/g++

程序的翻译过程及gcc选项

编译C语言是默认是a.out,如果想要指定名称的话,下列两种方法。
默认形成
在这里插入图片描述
指定名称
在这里插入图片描述
在这里插入图片描述
凡是和 -o 紧邻的是形成的可执行程序

  1  #include <stdio.h>2 #define M 1003 4 int main()5 {6     printf("hello linux\n");7     printf("hello linux: %d\n", M);                                                                                                                                 8     //printf("hello linux\n");9     //printf("hello linux\n");10     //printf("hello linux\n");11     //printf("hello linux\n");12     //printf("hello linux\n");13 14     return 0;15 }

预处理

头文件展开:本质在预处理的时候,将头文件内容拷贝至源文件
去注释
宏替换
条件编译

gcc -E test.c -o test.i

-E : 从现在开始进行程序的翻译过程,预处理做完的时候就停下来
在这里插入图片描述
上面多出的八百多行代码都是头文件展开

条件编译

条件编译的本质:对代码进行裁剪

  1 #include <stdio.h>2 #define VERSION1 13 // #define VERSION2 24                                                                                                                                                                     5 int main()6 {7     printf("hello linux\n");8 #ifdef VERSION1 9     printf("hello version1.0\n");10 #elif VERSION2 11     printf("hello version2.0\n");12 #else13     printf("hello free version\n");14 #endif15     //printf("hello linux\n");16     //printf("hello linux\n");17     //printf("hello linux\n");18     //printf("hello linux\n");19     //printf("hello linux\n");20 21     return 0;22 }

在这里插入图片描述
将test.c里面的两个宏都注释掉,可以在gcc指令里面添加宏 -D

gcc test.c -o test.exe -D VERSION1=1
gcc test.c -o test.exe -DVERSION1=1
//可以连着也可也不连着

在这里插入图片描述

应用场景
1、对于软件的专业版与社区版,维护一份代码,可以用条件编译对里面的功能进行裁剪
2、头文件定义上,防止头文件被重复包含

#ifndef __CODE_H__
#define __CODE_H__
// XXXX
#endif

编译

C -> 汇编
从test.c开始也许, -S 从现在开始进行语言的翻译,当编译工作完成就停止

gcc -S test.i -o test.s

形成汇编语言
在这里插入图片描述

汇编

汇编 -> 二进制,可重定位目标二进制文件(不能执行
test.o : 可重定位目标二进制文件

gcc -c test.s -o test.o

vim是文本编辑器,所有对于二进制展现出来是乱码
在这里插入图片描述

链接

将可执行程序与库关联起来

gcc -o test test.o

ldd 命令可以查询一个可执行文件所依赖的库
在这里插入图片描述
其中/lib64/libc.so.6就是所用的C语言的库

g++

1、编译失败问题
在这里插入图片描述
输入下列指令

sudo yum -y install gcc+ gcc-c++

2、编译形成指定名称的可执行程序
C语言也可以用g++编译,g++的选项与gcc一样
在这里插入图片描述

g++ test.c -o mybincpp
g++ -o mybincpp test.c

动静态库的理解 – 链接

我们所写的代码都是代码+调用的库
库让我们写一份代码不用从零开始
都是文件
在这里插入图片描述

下面这个是个动态库
在这里插入图片描述
去掉lib(所有库都以这个开头),去掉.so.6,所有这个库是个c库
动态库 -> 动态链接
静态库 -> 静态链接

动态库
优点:节省资源,不会出现太多的重复代码 — 资源(磁盘、内存、网络(如果你在一个网站上传一份重复很多的代码,那别人下载也是在浪费资源)等)
缺点:对库的依赖性比较强,一旦库丢失,所以使用这个库的程序都无法运行
静态库
优点:不依赖库,同类型平台中都可以直接运行使用
缺点:可执行程序体积比较大,比较浪费资源 — 资源(磁盘、内存、网络(如果你在一个网站上传一份重复很多的代码,那别人下载也是在浪费资源)等)

动态链接、动态库

被多个使用者共享使用,一旦缺失,所有程序都不可以运行了!!
我们调用哪个库,只是在代码中指明库的地址
在这里插入图片描述

静态链接、静态库

代码中我们用到哪个库,直接硬拷过来,成为静态链接
在这里插入图片描述

ldd

ldd可以查看一个文件库的依赖情况
在这里插入图片描述

file

动态库又称为共享库
在这里插入图片描述
形成用静态库的可执行程序在这里插入图片描述

注意:一般程序是不会给安装静态库de,需要用yum进行安装
ld是连接器
sudo yum install -y glibc-static libstdc++-static在这里插入图片描述
在这里插入图片描述

make/makefile – 项目自动化构建

在linux中是使用命令行的,如果有十几个源文件,难道每一个都要用gcc/g++去进行预处理、编译、汇编等操作吗?

make是一个命令
makefile是一个文件(保存的依赖关系和依赖方法)

快速使用

1、创建Makefile/makefile文件

touch Makefile
touch makefile

在这里插入图片描述

2、vim打开这个文件
第一行:依赖关系
第二行:依赖方法
在这里插入图片描述

在这里插入图片描述

解释依赖关系和依赖方法

依赖关系:我为什么要帮你?
依赖方法:我怎么帮你?
目标文件:依赖文件列表(用空格作为分隔符)
形成可执行文件的方法

清理项目

clean后面为空,需要依赖关系,但依赖关系为空
在这里插入图片描述

make的小知识点

1、Makefile和make形成目标文件的时候,默认是从上到下扫描makefle的文件,默认形成的第一个目标文件
2、默认只形成一个
3、 make和makefile怎么知道可执行程序是比较新的呢??这个是通过对比时间比出来的,只要可执行程序的最近修改时间比所有源文件的最近修改时间新,说明它就是最新的!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

认识的文件的时间

1、Modify:对文件内容做修改时
2、Change:对文件属性做修改时
3、Accesss:文件访问时间,只有对文件内容进行打印查看的时候才会改变

1、当对文件内容进行修改的时候,文件的大小也会改变,连带着文件的属性也变了
在这里插入图片描述
2、对权限进行修改的时候不会改变内容,因此只有Change改变了
在这里插入图片描述
3、
在这里插入图片描述

Access并不是每一次都会改变:最初设计的时候,每次查看Access都会改变更新。相比于修改内容和属性,查看文件是十分频繁的,这导致Access会频繁更新,进而造成资源浪费。-- 当短时间内频繁查看时,Access只会在第一次时修改,之后不再修改
4、当不想更改文件内容,而想让Modify更新
可以用touch,当创建的文件存在时,它只会刷新文件的时间。
在这里插入图片描述

5、不用touch就make
如果每一次make都要touch一下太麻烦了 — PHONY
修饰mybin目标文件,成为一个伪目标
在这里插入图片描述

在这里插入图片描述

但我们一般是给clean

.PHONY:clean

补充makefile的语法

&@ 、 &^

&@代表mybin
$^代表mytest.c
在这里插入图片描述

makefile里面的全局变量

在这里插入图片描述

关于makefile/make的语法推导

在这里插入图片描述

第一个小程序 – 进度条

写源代码之前,先把makefile写通

预备的两个小知识

缓冲区

回车与换行

入门版的进度条

升级版进度条 – 设计上

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

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

相关文章

TCP协议 及 重要机制

目录 1.TCP 协议报文格式 1.1.端口号 1.2 首部长度 和 选项 1.3 保留位 1.4 检验和 1.5 32位序号和确认序号 2. TCP的重要机制 2.1 确认应答 2.2 超时重传 2.3 连接管理 2.3.1 三次握手 2.3.2 四次挥手 2.4 滑动窗口 2.5 流量控制 2.6 拥塞控制 2.7 延时应答 2…

JAVA EE (计算机是如何工作的)

学前注意事项 出去面试的时候java岗位不需要懂前端&#xff08;会少量讲解&#xff09; 但是我们做项目的时候多少回用到一些前端的东西 1.什么是计算机 1.1前情提要 不仅仅只有电脑是计算机 计算机还不仅仅是电脑手机和平板 路由器 智能洗衣机 刷脸打卡机都可以说是计算…

Ubuntu18.04桌面版设置静态IP地址

引用: Ubuntu配置静态IP_ubuntu配置静态ip地址-CSDN博客 正文 默认Unbuntu 18.04 Desktop桌面版使用 netplan 管理网卡网络地址。使用Unbuntu 18.04 桌面版配置&#xff0c;可以通过桌面上的设置图标配置网卡的静态IP地址。 点击桌面右上角下拉框&#xff0c;点击“设置”按…

知乎x-zse-96逆向

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

JAVA每日面经——JVM篇(包含JVM优化)

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 目录 一、什么是JVM&#xff1f;二、JVM由…

酷开系统用电视为居家生活打开精彩窗口|酷开科技|酷开会员|

随着互联网的发展&#xff0c;电视也承载了更多的功能。相比于传统的电视&#xff0c;如今的智能电视屏幕更大、分辨率更高、色彩更加鲜艳&#xff0c;能够呈现出更加逼真的画面效果。当观众观看大屏电视时&#xff0c;仿佛置身于电影大幕的场景之中&#xff0c;感受到更为震撼…

html常见标签

width宽度 height高度 border边框 1px&#xff08;边框线条宽度&#xff09; solid&#xff08;实线&#xff09; red&#xff08;红色&#xff09; border-radius: 100px 边框圆角 background-color&#xff1a;red&#xff08;背景颜色为红色&#xff09; margin&#xf…

2024年最新Anaconda3 2024版中Jupyter Notebook安装

一、 Anaconda3 2024版下载 1.下载&#xff1a;Free Download | Anaconda 2.等待 解释&#xff1a;默认选择等等下载 &#xff0c;时间可能数分钟 3.安装 解释&#xff1a;打开刚刚下载的Anaconda Navigator&#xff0c;并如图安装低版本&#xff0c;高版本会直接报错 4. …

CSS学习笔记:transform属性实现元素的位移、旋转、缩放

位移 实现居中的两种方法 绝对定位的盒子在父盒子中实现居中效果有两种方法 法一&#xff1a;margin 其中&#xff0c;left和top的值分别为子盒子自身宽高的一半 法二&#xff1a;translate 实现过渡效果 translate常常配合hover和transition使用&#xff0c;以实现鼠标悬停…

微博修改密码后无法通过微博开放接口发送微博

生产环境&#xff0c;因密码修改导致授权失效致接口发送微博失效&#xff01;内部网站编辑完博文后无法发送微博。在修改密码时&#xff0c;有提示授权应用失效&#xff0c;操作人员不清晰情况&#xff0c;直接忽视。 微博应用开放接口----》微博转发博文接口文档 无示例 遗憾…

突破边界:Web3开启数字化社会的新纪元

引言 随着科技的不断进步和数字化社会的发展&#xff0c;Web3正逐渐成为了人们关注的焦点。作为新一代互联网的演进形态&#xff0c;Web3具有突破传统边界、实现去中心化的特点&#xff0c;被认为将开启数字化社会的新纪元。本文将深入探讨Web3的概念、特点、应用场景&#xf…

【LeetCode: 224. 基本计算器 + 模拟 + 栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Java的集合体系及相关数据结构---Collection系列

​​​​​​​ 其中&#xff0c;有序和无序是指存取时候的顺序一致或者不一致&#xff1b; Collection是单列集合的顶层接口&#xff0c;它的方法全部单列集合可用。 Collection方法 方法名说明boolean add(E e)添加元素boolean remove(Object o)从集合中移除指定的元素…

语音转文字——sherpa ncnn语音识别离线部署C++实现

简介 Sherpa是一个中文语音识别的项目&#xff0c;使用了PyTorch 进行语音识别模型的训练&#xff0c;然后训练好的模型导出成 torchscript 格式&#xff0c;以便在 C 环境中进行推理。尽管 PyTorch 在 CPU 和 GPU 上有良好的支持&#xff0c;但它可能对资源的要求较高&#x…

HarmonyOS 应用开发案例

本帖下方集中了HarmonyOS Next应用开发时&#xff0c;会遇到的常见应用案例。后续会持续更新大量案例&#xff0c;帮助开发者快速学习。欢迎感兴趣的同学加入Q&#xff1a;454901491 72.手写绘制及保存图片案例&#xff08;0319更新&#xff09;&#xff08;点此查看源码实现&…

Windows10无盘母盘制作-以云更新为例

Windows10无盘母盘制作-以云更新为例 缘起环境准备创建虚拟机安装系统导出系统 缘起 网吧客户端在实际环境中&#xff0c;经常要面对形形色色对无盘系统&#xff0c;五花八门对无盘镜像&#xff0c; 为了方便确认不同无盘环境对客户的对影响&#xff0c;决定自己制作一个无盘母…

【python + Django】Django模板语法 + 请求和响应

前言&#xff1a; 现在现在&#xff0c;我们要开始将变量的值展现在页面上面啦&#xff01; 要是只会显示静态页面&#xff0c;我们的页面也太难看和死板了&#xff0c; 并且数据库的数据也没法展现在页面上。 但是呢&#xff0c;模板语法学习之后就可以啦&#xff01;&…

【大模型服务】01EdgeFM: Leveraging Foundation Model for Open-set Learning on the Edge

该文发表在 SenSys’23(CCF B) 上&#xff0c;作者是来自港中文的鄢振宇。这是一篇关于云端协同的文章&#xff0c;主要解决边缘设备深度模型的泛化性不足问题&#xff0c;实现 Open-set Learning。 文章目录 背景Open-Set Recognition 的挑战EdgeFM 整体架构图云端&#xff1…

21---EEPROM电路设计

视频链接 EEPROM电路设计01_哔哩哔哩_bilibili EEPROM电路设计 1、存储器的分类 一般根据掉电丢失来划分的存储器。可分为易失性存储器和非易失性储存器。 ROM在系统停止供电的时候仍然可以保持数据&#xff0c;而RAM通常都是在掉电之后就丢失数据。 1.1、易失性存储器-R…

升级 HarmonyOS 4 版本,腕上智慧更进一步

HUAWEI WATCH GT 3 系列升级 HarmonyOS 4 新版本后&#xff0c;手表体验更进一步&#xff0c;快来看看有哪些变化吧~