准备 博主:大大怪先森(记得关注哦!)
编程环境:xshell(点击下载)
所示代码:码源
文章目录
- 准备
- 前言
- 一、linux的基本工具
- 二、linux编译器
-
- 1.vi/vim的使用
-
- 2.1.1基本概念
- 2.1.2vim的正常命令操作集
- 2.1.3vim总结
- 2.gcc/g++的使用
-
- 2.1gcc如何完成
-
- 2.1.1 基础背景
- 2.1.2基础格式
- 2.2gcc完成过程
-
- 2.2.1预处理
- 2.2.2编译
- 2.2.3汇编
- 2.2.4链接
- 2.3函数库(重要的一个概念)
- 三、linux的调试器
-
- 3.1gdb基础知识
- 3.2gdb的使用
- 四、linux的自动化构造工具
-
- make/Makefile
- linux的第一个小项目-进度条
- 结语
前言 本文将浅谈一下在linux操作环境下一些基本开发工具的使用问题!!!
提示:以下是本篇文章正文内容
一、linux的基本工具 【vim|linux的基本开发工具(vim,gcc,gdb,make/Makefile)】
文章图片
二、linux编译器 1.vi/vim的使用
vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows2.1.1基本概念
vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command >mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
2.1.2vim的正常命令操作集
- 正常/普通/命令模式(Normal mode):
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode- 插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。- 末行模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入
文章图片
vim插入模式:
- 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
- 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字,
- 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字.
- 重插入模式转入命令模式
vim命令模式:
- 按「ESC」键
- 移动光标
- 左上下右:h(左)j(上)k(下)l(右)
- 光标位置锚点:shift + ^(行首),shift + $(行尾)
- 起始行:gg
- 结束行:shift + g
- 指定行:n +shift + g
- 按照单次为单位向后移动:b/w
- 文本编译
vim底行操作:
- 复制当前行:yy
- 复制当前行以及之后的n行,包括当前行:nyy
- 撤销误操作:u
- 粘贴:p,一次粘贴多行:np
- 删除当前所在行:dd(ndd支持删除多行)
- 剪切效果:dd -> p
- 快速大小写切换:shift + ~
- 从左向右删除光标之后的字符:x
- 替换光标所在的字符: r
- 替换模式,直接对多个模式内容进行替换:shift + r
- 撤销最近操作:ctrl +r
注意:vim配置在自己的文件操作里面,只会影响当前用户的配置不会影响其他用户的配置
- 调出行号:set nu
- 多文件操作:ctrl +w + w
- 保存:w
- 退出:q
- 强制:!
文章图片
2.1.3vim总结
三种模式
当然vim模式不仅仅只是当前我们简单的讲解得三种模式,其他的模式各位大大可以自行探索,本人不再过多讲解
- 命令模式
- 插入模式
- 底行模式
2.gcc/g++的使用 2.1gcc如何完成
2.1.1 基础背景
2.1.2基础格式
- 预处理(进行宏替换)
- 编译(生成汇编)
- 汇编(生成机器可识别代码)
- 连接(生成可执行文件或库文件)
gcc [选项] 要编译的文件 [选项] [目标文件]2.2gcc完成过程
文章图片
2.2.1预处理
预处理功能主要包括宏定义,文件包含,条件编译,去注释等。2.2.2编译
预处理指令是以#号开头的代码行。
实例: gcc –E test.c –o test.i
选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序
文章图片
文章图片
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的>工作,在检查无误后,gcc 把代码翻译成汇编语言。2.2.3汇编
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
实例: gcc –S test.i –o test.s
文章图片
汇编阶段是把编译阶段生成的“.s”文件转成目标文件2.2.4链接
读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
实例: gcc –c test.s –o test.o
文章图片
在成功编译之后,就进入了链接阶段2.3函数库(重要的一个概念)
实例: gcc test.o –o mytest
文章图片
函数库一般分为两种:动态库和静态库
三、linux的调试器 3.1gdb基础知识
- 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”
- 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc test.o –o test
- gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证
文章图片
gdb调试程序必须是debug版本,然而在linux下生成的可执行程序默认是releas版本,所以需要我们自己加上 -g进行更改3.2gdb的使用
文章图片
四、linux的自动化构造工具 make/Makefile
- list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
- list/l 函数名:列出某个函数的源代码。
- r或run:运行程序。
- n 或 next:单条执行。
- s或step:进入函数调用
- break(b) 行号:在某一行设置断点
- break 函数名:在某个函数开头设置断点
- info break :查看断点信息。
- finish:执行到当前函数返回,然后挺下来等待命令
- delete breakpoints:删除所有断点
- delete breakpoints n:删除序号为n的断点
- disable breakpoints:禁用断点
- enable breakpoints:启用断点
- until X行号:跳至X行
- quit:退出gdb
make是指令,Makefile是文件linux的第一个小项目-进度条
文件和文件之间互相依赖关系
文章图片
文章图片
#include
#include
#include
#define NUM 100
int main()
{
char bar[NUM + 1];
memset(bar,'\0',sizeof(bar));
int i = 0;
const char* lable = "|/-\\";
while(i <= 100)
{
printf("[%-100s][%d%%][%c]\r",bar,i,lable[i % 4]);
fflush(stdout);
bar[i] = '=';
bar[i+ 1] = '>';
i++;
usleep(50000);
}
printf("\n");
return 0;
}
效果展示:
文章图片
结语
希望本篇文章能给各位带来帮助,如有不足还请指正!!!
码字不易,各位大大给个收藏点赞吧!!!
文章图片
推荐阅读
- linux|【Linux】多线程的概念
- 运维|centos8报错(Errors during downloading metadata for repository ‘base‘)
- centos|docker 安装mysql5.7
- linux禁用CPU 禁用cpu内核
- 【Git】常用操作
- linux命令测网速
- Linux的用户和用户组管理
- Linux操作系统下/etc/hosts文件配置方法
- Java|Java Springboot项?部署到linux任意文件夹或tomcat,并使用nginx实现域名访问