Linux知识点 – Linux环境基础开发工具使用
文章目录
- Linux知识点 -- Linux环境基础开发工具使用
- 一、Linux编辑器 - vim
- 1.vim的打开与关闭
- 2.vim的三种模式
- 3.命令模式常见命令
- 4.底行模式命令
- 5.设置vim的table键为4个字符
 
- 二、Linux编辑器 - gcc / g++
- 1.介绍
- 2.gcc / g++的使用
- 3.gcc / g++的编译过程
- 4.Linux下的动、静态库
 
- 三、Linux项目自动化构建工具 - make / Makefile
- 1.介绍
- 2.使用make / Makefile来构建项目
- 4 .PHONY: 伪目标
- 5.Linux多文件项目
 
- 四、进度条小程序
一、Linux编辑器 - vim
vim配置:https://gitee.com/HGtz2222/VimForCpp?_from=gitee_search
1.vim的打开与关闭
打开vim
[lmx@VM-8-2-centos lesson07-27]$ vim

 使用vim打开文件
[lmx@VM-8-2-centos lesson07-27]$ vim main.c

 关闭vim
 shift + :,光标到左下角,然后输入q,退出vim;
 
2.vim的三种模式
(1)命令模式:默认打开的模式,输入命令可执行;
 输入 i 切换至编辑/插入模式,按ESC退回命令模式;
 输入 shift + : 切换至底行模式,按ESC退回命令模式;
 
 (2)编辑/插入模式:用于文本编辑;
 
 (3)底行模式:执行底行命令;
 
 注:编辑模式和底行模式不能互相切换;
3.命令模式常见命令
(1)yy:将当前光标所在的行进行复制;
 nyy表示复制n行;
 (2)p:当复制的行在光标处进行粘贴;
 np表示粘贴n次;
 (3)dd:将当前光标所在的行进行剪切(删除);
 ndd表示剪切n行;
 
 (4)u:撤销操作;
 (5)ctrl + r :撤销u操作;
 (6)shift + g:光标定位到文件的结尾;
 (7)gg:光标定位到文件的最开始;
 (8)n + shift + g:光标定位到文件的任意行;
 (9)shift + 6(^):光标定位到当前行的最开始;
 (10)shift + 4(¥):光标定位到当前行的最结尾;
 (11)w,b:以单词为单位,进行光标的前后移动;
 (12)h,j,k,l:左,下,上,右;
 (13)shift + ~:大小写切换
 (14)shift + r:进入替换模式(insert);
 (15)r:替换光标所在的字符;
 nr:替换n个字符;
 (16)x:删除光标所在字符;
 shift + x:删除光标之前的字符;
 支持nx,n + shift + x;
4.底行模式命令
**(1)set nu/nonu : 打开行号 / 取消行号;
 (2)vs 文件名:分屏操作;
 分屏切换光标:ctrl + ww;
 (3)w:写入,保存;w!是强制保存;
 (4)q:退出;q!强制退出;
 (5)!cmd :不退出vim执行对应的cmd命令(执行命令行,编译,运行,查看man等);
 **
 
5.设置vim的table键为4个字符
[lmx@VM-8-2-centos lesson07-27]$ cd ~  //进入家目录
[lmx@VM-8-2-centos ~]$ vim .vimrc	//打开vim配置文件

 将这几行改为4,table就是4字符了;
二、Linux编辑器 - gcc / g++
1.介绍
gcc / g++是专门用来编译链接c / c++的编译器;
 默认centos7.6 or 8匹配的gcc版本是4.8;
 gcc进行程序处理的过程与widows系统上的IDE处理过程是一样的,都经历4步:
 (1)预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译 …)
 (2)编译(c -> 汇编)
 (3)汇编(汇编 -> 可重定向二进制目标文件)
 (4)链接(链接多个.o文件,多个.obj文件合并形成一个可执行文件,默认名为a.out)
2.gcc / g++的使用
使用gcc编译生成可执行文件:
 
 执行gcc 文件名… -o 可执行文件名
 -o是指定一个新名字,输出到该文件;
 也可以gcc -o 可执行文件名 文件名…
 -o后一定要跟着目标文件名;
[lmx@VM-8-2-centos lesson07-27]$ gcc hello.c -o hello
[lmx@VM-8-2-centos lesson07-27]$ ls
hello    install.sh  main.o    mytest  test.c  test.o
hello.c  main.c      Makefile  proc    test.h
运行可执行文件
 ./可执行文件
 (./是指在当前文件夹下)
[lmx@VM-8-2-centos lesson07-27]$ ./hello
hello world!
使用g++编译生成可执行文件
 
[lmx@VM-8-2-centos lesson07-27]$ g++ hello.cpp -o hello
[lmx@VM-8-2-centos lesson07-27]$ ls
hello      install.sh  main.o    mytest  test.c  test.o
hello.cpp  main.c      Makefile  proc    test.h
3.gcc / g++的编译过程
gcc选项
 
(1)预处理
 
 g++ -E:从现在开始进行程序的翻译,如果预处理完成,就停下来;
 预处理后保存到可执行临时文件hello.i中;
 
 (2)编译
 
 g++ -S:从现在开始进行程序的翻译,如果编译完成,就停下来;
 编译后保存到hello.s文件中;
 
 (3)汇编
 
 g++ -c:从现在开始进行程序的翻译,如果汇编完成,就停下来;
 汇编后生成可重定向目标文件hello.o;
 
 (4)链接
 
 链接生成可执行文件hello(若不指定文件名,默认名为a.out);
4.Linux下的动、静态库
静态库:是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为".a"(windows下为".lib");
 动态库:在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销;动态库一般后缀名为".so"(windows下为".dll");
 gcc默认生成的二进制程序,是动态链接的;
Linux中的库位置
 
 gcc / g++默认生成的可执行文件是动态连接的
 
 gcc / g++使用静态链接
 
 若链接失败,可能是没有安装静态库:
sudo yum install -y glibc-static  #c静态库
sudo yum install -y libstdc++-static  #c++静态库
三、Linux项目自动化构建工具 - make / Makefile
1.介绍
一个工程中的源文件有很多,按类型、功能、模块分别放在若干个,目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于更复杂的功能操作;
 make是一个命令,Makefile是一个文件,两者一块完成项目的自动化构建;
 Makefile中包含了a.依赖关系;b.依赖方法;
2.使用make / Makefile来构建项目
(1)创建Makefile文件
[lmx@VM-8-2-centos lesson07-27]$ touch Makefile
(2)编写Makefile并构建项目
 
 在Makefile中编辑依赖关系和依赖方法:
 依赖关系可以不依赖任何文件;
 
 编辑好Makefile后,在命令行中执行make指令,系统就会依照Makefile中的依赖关系和依赖方法去构建项目:
 
 
 (3)项目清理
 
 使用make clean指令调用clean文件,执行清理项目的指令;
 
 注:Makefile默认只会找到第一个目标文件去执行,只有一对依赖关系和方法;
 像上面的Makefile在执行make指令时只会执行test文件,而不会找到后面的clean;
 如果改成下面这样:
 
 make时只会执行clean,而不会执行后面的test;
 
 如果想执行Makefile后面的目标文件,可以在make后面带上文件名;
 
4 .PHONY: 伪目标
==.PHONY:==标记的目标文件为伪目标,总是被执行;
 
 clean为伪目标;
 
 make执行一次后,可执行程序test是最新的,就不能再次执行了;
 而伪目标clean可以一直执行;
注:Makefile是如何得知我们的可执行程序是最新的:
 是根据文件的最近修改时间来知道的;
 
5.Linux多文件项目

 
 
 
 Makefile需要执行的指令:
 
 
 Makefile第一个找到的目标文件是mytest,所以在第一次make时,系统检测到没有test.o 和 main.o,所以会继续向下执行,直到形成test,o和mian.o;
 
四、进度条小程序
写代码时先写Makefile,保证能把hello world跑通,再写其他代码;
 
 
 缓冲区问题:
 
 
 hello world会在3秒之后才会打印;
 printf这句代码早就执行完了,只不过信息没有立马被显示出来;
 c语言是会给我们提供输出缓冲区(一段内存空间)的,根据特定的刷新策略来进行刷新;
 显示器设备,一般的刷新策略是行刷新,碰到’\n’,就把’\n’之前的所有字符全部显示出来;
如果需要马上刷新输出缓冲区,可以用fflush:
 
 
 这样hello world就会立刻打印出来,打印完再等3秒程序运行结束;
倒计时程序:
 
 \r:回车,不会触发行刷新;\n:换行;
 每打印完一个字符串,\r光标回到最开始,在当前行继续向后打印,然后强制刷新缓冲区;延迟1s后进入下一次循环;
 
 程序运行完成后,光标回到最开始:
 
 进度条程序:
  1 #include<stdio.h>  
  2 #include <unistd.h>  
  3 #include <string.h>  
  4   
  5 #define NUM 102  
  6   
  7 int main()  
  8 {  
  9   char bar[NUM];  
 10   memset(bar, 0, sizeof(bar));  
 11   const char* lable = "|/-\\"; //4符号代表进度条  
 12   
 13   int count = 0;  
 14   while(count <= 100)  
 15   {  
 16     
 17     printf("[%-100s][%d%%] %c\r", bar, count, lable[count%4]);  
 18     bar[count++] = '#';  
 19     fflush(stdout);  
 20     usleep(30000);//单位是微妙  
 21   }  
 22   printf("\n");                                                             
 23   return 0;                                          
 24 }    
运行效果:
 
















![[架构之路-196] - 发现问题原因的通常步骤:提出问题、明确问题、偏差分析、因素分析、原因分析](https://img-blog.csdnimg.cn/img_convert/f7efe2bf33776de3a2e3b4fffb5ec56b.jpeg)


