目录
-
-
-
- 1.yum —— 软件包管理工具
-
- 查看:
- 安装:
- 卸载:
- 2.vim —— 编辑器
- 3.gcc —— 编译器
-
- 3.1编译过程:
- 3.2 运行可执行文件
- 3.3 完整过程
- 4.gdb —— 调试器
-
- 4.1 调试器加载程序
- 4.2 开始调试程序
- 4.3 常用调试指令
- 5.make/Makefile(makefile) —— 项目自动化构建工具
-
- 5.1 Makefile的编写规则:
- 5.2 make的执行规则:
- 5.3 Makefile编写规则进阶
-
-
1.yum —— 软件包管理工具 —— 安装其他软件的工具(redhat 系列linux的软件包管理工具)
yum—— linux中默认的管理工具,提供软件包的查看,安装,移除等操作
三板斧操作:
查看:
- yum list —— 查看所有可安装的软件包
- yum list installed —— 查看已经安装的软件包
- yum search —— 搜索指定软件包
示例:yum search lrzsz
文章图片
- yum makecache —— 将软件包信息保存到本地
文章图片
- yum install —— 安装软件包(安装安装包必须要有管理员权限)
首先切换为管理员用户:su root
示例:yum install lrzsz
文章图片
- yum remove —— 卸载软件包(卸载安装包必须要有管理员权限)
首先切换为管理员用户:su root
示例:yum remove lrzsz
文章图片
查看该工具是否已经安装,查看该工具是否有版本信息,如果出现找不到命令,就表示没有
vim --version
文章图片
安装:yum install vim
操作模式:
- 普通模式:进行文本常见操作 —— 复制、剪切、删除、粘贴、撤销、返回、文本对齐、光标的快速移动
- 插入模式:文本数据的插入
- 底行模式:进行文本的保存,退出,数据的匹配,查找,替换等操作
vim filename 打开已有文件,或者创建一个新文件,打开之后默认处于普通模式
- 普通模式→插入模式:i —— 进入插入模式;a —— 光标后移一个字符,进入插入字符;o —— 在光标所在行下方创建新行,进入插入模式;I,A,O
- 普通模式→底行模式:使用英文冒号 : 进入底行模式,实现文本的保存和退出操作 :q ——退出、:w —— 保存、:wq —— 保存并退出、:q! —— 强制退出且不保存
- 其他模式→普通模式 :所有模式都是围绕普通模式切换的,任何模式下按Esc键,都可以返回普通模式
- 光标移动 : h、j、k、l ——上下左右移动光标,w / b —— 按单词移动光标,ctrl+f / b —— 上下翻页,gg / G —— 文档首行/末行。
- 文本操作: yy / nyy —— 复制 ;p/P —— 粘贴;dd / ndd —— vim 中没有删除,删除就相当于剪切;x —— 删除单个字符 ;dw —— 删除单词
- 其他操作:u —— 撤销上一次操作;ctrl+r 撤销的反向操作;gg=G —— 全文按照文档格式进行对齐
在使用vim打开文件时,每次其实是打开一个临时文件,作为中间交换文件,然后关闭源文件,编辑的操作都是在中间文件中完成的,只有使用正规退出(:wq)的时候,才会将改变的数据写入源文件中,并且删除中间文件,否则中间文件存在的情况下,下次vim打开文件的时候,就会有提示信息(删除这个中间文件后就没有)
3.gcc —— 编译器 —— 将所写的高级语言代码解释成为机器指令集
查看该工具是否已经安装,查看该工具是否有版本信息,如果出现找不到命令,就表示没有
gcc --version
文章图片
安装:yum install gcc gcc-c++
gcc 是c语言的编译器,g++是c++的编译器
作用:c、c++语言是高级语言,机器无法识别这些代码,需要编译器,将高级语言代码解释为机器指令,生成可执行程序文件才能执行
可执行的程序文件:一段功能的机器指令集
gcc编译器,在链接生成可执行程序时,会默认链接标准c库
3.1编译过程:
- 预处理:展开所有代码(引入头文件,宏替换,删除注释……) ;gcc -E
- 编译:进行语义语法纠错,没有错误了将代码解释为汇编代码;gcc -S
- 汇编:将汇编代码解释成为机器指令; gcc -c
- 链接:将所有用到的机器指令文件打包到一起,生成可执行程序。默认链接方式—— 动态链接(不仅仅是我们自己写的文件,还包括库文件)
- 链接方式:动态链接-链接动态库,只要库中的函数符号列表,运行依赖库;静态链接-链接静态库,获取库中函数实现。
- -o —— 指定要生成的文件名称(不指定生成的可执行文件默认为a.out)
- -E —— 只进行预处理
命令:gcc -E a.c -o a.i
文章图片
文章图片
- -S —— 只进行编译
命令:gcc -S a.i -o a.s
文章图片
文章图片
- -c —— 只进行汇编
命令:gcc -c a.s -o a.o
文章图片
- gcc —— 链接
在gcc命令后面紧跟目标文件的名字,就可以将目标文件链接成为可执行文件
- 命令:gcc a.o (不使用 -o 指定名称,默认生成a.out可执行文件)
文章图片
- 如果指定文件名称:
文章图片
- 通过-o选项也可以将可执行文件输出到其他目录,并不一定非得在当前目录下,例如:
命令:gcc a.o -o ./Test/main
文章图片
注意: 也可以不用写 ./ ,默认是当前目录。Test 目录必须存在,如果不存在,gcc 命令不会自动创建,而是抛出一个错误。
- 命令:gcc a.o (不使用 -o 指定名称,默认生成a.out可执行文件)
文章图片
如果不写./,Linux 会到系统路径下查找 a.out,而系统路径下显然不存在这个程序,所以会运行失败。
文章图片
3.3 完整过程
文章图片
4.gdb —— 调试器 ——调试程序运行过程
查看该工具是否已经安装,查看该工具是否有版本信息,如果出现找不到命令,就表示没有
gdb --version
安装:yum install gdb
说明:
- gdb 加载可执行文件,出现报错,报出的是源码的哪一行出的错。因为,调试的可执行程序就是通过源文件生成的。
- 调试一个程序的运行过程,能够让我们从运行过程中发现程序哪里有问题,可以适当的改变数据达到某种调试目的,并不是所有的程序都可以调试,调试器只能调试具有调试符号信息的程序 —— debug版本的程序
- 调试一个程序前提:这个程序是一个debug版本程序。gcc生成可执行程序,默认会生成release版本的程序,程序中没有调试符号信息,想要生成debug版本需要加上-g选项
例如: gcc -g a.c -o main
文章图片
- gdb ./main —— 直接使用gdb加载程序
文章图片
- gdb -p 进程id —— 直接对一个正在运行中的程序进行调试,-p用于指定进程id
- run —— 直接运行
段错误也就是内存访问错误
文章图片
- start —— 开始逐步调试
文章图片
- next/n —— 下一步,遇到函数直接运行,不会跟踪进入
文章图片
- step/s —— 下一步,遇到函数则跟踪进入函数
文章图片
- list/l —— 默认查看调试行附近代码,也可以指定行 list a.c:20
文章图片
- until —— 直接运行到指定行,也可以指定文件,until a.c:25
文章图片
文章图片
- continue/c —— 继续运行,直到断点处停下
文章图片
文章图片
- break a.c:9 —— 给指定文件指定行打断点,程序运行到断点就会停下
文章图片
- break function —— 给函数打断点
文章图片
- info break 查看断点信息
文章图片
- watch —— watch a给变量打断点,当变量数据发生改变的时候停下
文章图片
- delete/d —— 删除断点
- print/p —— 查看变量数据print a;
print a=10设置变量数据
文章图片
- backtrace —— 查看程序运行调用栈信息,程序一旦崩溃,查看调用栈可以快速定位崩溃位置——栈顶函数(因为当程序崩溃的时候,栈顶函数来不及出栈,因此栈顶函数就是崩溃位置)
文章图片
Makefile —— 普通的文本文件,用于记录项目的构建规则流程
make —— Makefile解释程序,对Makefile中的构建规则逐行进行解释执行,完成项目的构建
5.1 Makefile的编写规则:
- 目标对象:依赖对象
目标对象 —— 是要生成的可执行程序的名称
依赖对象 —— 是生成目标对象所需的源码文件 - 制表符\t 执行指令 (只能是制表符,也就是tab,不能为空格)
- make在解释执行的时候会找到当前所在目录中的Makefile文件,在这个文件中找到第一个目标对象,执行这个目标对象对应的指令
文章图片
- —旦在命令行执行make,则运行make解释程序,在当前目录下寻找Makefile文件,如果没有Makefile文件就会停止执行
文章图片
- make的执行规则中,要生成目标对象,首先要先保证依赖对象已经生成,则会递归向下寻找依赖对象的生成规则
文章图片
文章图片
- 打开文件,找到第一个目标对象,与依赖对象进行时间关系判断,判断目标对象是否需要重新生成(只生成第一个目标对象就会退出)
文章图片
文章图片
- 若需要生成,则执行指令;
(指令不—定非是生成目标对象的指令)
文章图片
文章图片
- $@ —— 表示目标对象
- $^ —— 表示所有依赖对象
- $< —— 表示所有依赖对象中第一个依赖对象
文章图片
文章图片
wildcard / patsubst 关键字的使用(patsubst 这个关键字就是一个字符串替换功能,只是获取到文件名称数据)
文章图片
伪对象声明使用:
.PHONY:目标对象名称
伪对象的作用:不管对象是否最新,每次都要重新生成
- 不声明伪对象使用:
文章图片
文章图片
- 声明伪对象使用:
文章图片
文章图片
推荐阅读
- Linux|Linux环境开发工具使用(yum、vim、gcc、g++、gdb、make/Makefile)
- Linux环境基础开发工具使用(yum,vim,gcc/g++,gdb,Makefile,git~~)
- Linux|Linux环境基础开发工具使用(yum、vim、gcc/g++、gdb、make、git)
- 服务器部署|服务器部署(保姆级教程)
- linux|linux《yum》《vim》《gcc/g++》《gdb》《Make/makefile》学习
- Java基础与算法|Linux学习(二)---实操篇1远程登录
- Linux|Linux【实操篇】—— 远程登录、远程文件传输、vi和vim工具的使用方法
- Linux系统编程|【Linux】Linux环境基础开发工具使用 —— yum | vim | gcc & g++ | gdb | make & makefile | 进度条 | git
- Linux学习|Linux环境及工具(yum/vim/gcc/g++/gdb/make/Makefile)