常用工具
yum—软件包管理工具
软件安装方法:
1.手动源码安装
2.使用工具安装(工具自身可以解决软件包安装的依赖关系)
yum的常用操作:
查看
查看能安装什么
yum list | grep package_name
查看已经安装了什么
yum list installed | greppackage_name
安装(root)
yum install package_name
移除(root)
yum remove package_name
vim :12种操作模式,但常用的只有三种普通模式、插入模式、底行模式
模式切换 | header 2 |
---|---|
普通<->插入 | i a o I A O ESC |
普通<->底行 | ESC |
**底行模式:**q(退出) w(保存) wq(保存并退出) q!(强制退出)
/string ?string(字符串查找)
普通模式:
光标移动:hjkl ctrl+f/b w/b gg G
复制:yy nyy
粘贴:p P
删除:x dw D dd ndd
撤销:u(上一步) ctrl+r(下一步)
其他:gg=G
gcc:编译器
功能:将c或c++高级语言代码翻译成机器可识别代码
编译过程 | 具体操作 |
---|---|
预处理 | 展开所有代码 |
展开所有代码 | 语法语义纠错,若为错翻译为汇编代码 |
汇编 | 语法语义纠错,若为错翻译为汇编代码 |
链接 | 链接库文件中的代码 |
链接又分为静态链接和动态链接
静态链接:链接静态库,将库中的代码直接全部拷贝到可执行程序中,
优点:程序运行时,不需要依赖库文件的存在;
缺点:占用资源较多
动态链接:链接动态库,只是记录库中的接口符号位置信息
优点:资源占用冗余较小
缺点:程序运行时需要动态库(又叫共享库/运行时库)的存在
gcc默认链接方式:动态链接
gcc常用选项
-E 只进行预处理
-S 只进行编译
-c 只进行汇编
-o 用于指定生成的文件名称
-static 使用静态链接
-E 只进行预处理
-E 只进行预处理
-E 只进行预处理
gdb:调试器
功能:调试一个程序的运行过程
linux下程序编译默认生成release版本程序,不带有调试符号信息,意味着程序无法被调试所以程序调试的前提就是编译生成debug版本程序,因此gcc编译程序时需要加上 -g 选项,开启调试,向程序中添加调试符号信息
- gcc -g main.c -o main
gdb调试程序,需要将程序信息,加载到gdb中 - gdb ./main
gdb 进入gdb后 运行 file ./main命令
开始调试:
1.运行程序加载运行参数
r(run) -a -b -c -d…
start 开始逐步调试
n(next) 下一步;并不跟踪进入函数
s 下一步;跟踪进入函数
p yar 查看变量数据
l 查看调试行附近(上下五行)代码
l line 查看指定行(默认当前调试行)附近代码
until line 直接运行到指定行
2.常见操作
b line 向当前调试文件指定行添加断点 b file:line 向指定文件指定行添加断点
b func 向函数添加断点
watch var 变量监控,给变量添加断点,当变量内容发生改变,停止
i b 查看断点信息
d id 删除指定断点(默认删除所有)
c(continue) 继续运行
bt 查看函数调运栈信息
make/Makefile:项目自动化构建工具
**Makefile:**普通的文本文件,但是在其中记录的是项目构建的流程规则
**make:**一个程序–Makefile的解释器; 解释Makefile中项目的构建规则;
完成项目构建
在当前目录下敲击make命令,make程序到当前目录找Makefile文件,逐行解释,对Makefile文件名称大小写无所谓
Makefile基本编写规则:
目标对象:[依赖对象]
tab 要执行的命令
make的解释规则
make在Makefile中寻找第一个目标对象
若没有找到:认为没有要生成的对象,报错退出
若找到了:判断目标对象是否存在
目标对象若存在:判断是否有依赖对象名称
若没有依赖对象名称:认为目标对象已经生成,不需要重新执行命令生成
若有依赖对象:判断依赖对象文件是否存在:
若存在:判断目标对象文件与依赖对象文件的时间关系
若不存在:在Makefile继续向下查找依赖对象的生成规则
依赖对象在下一条规则中作为目标对象被生成,进而生成第一个目标对象后退出
目标对象文件若不存在:则直接执行命令生成
Makefile预定义变量:KaTeX parse error: Expected 'EOF', got '&' at position 2: @&̲emsp;^ $<
@
∗
∗
:
目
标
对
象
<
/
b
r
>
∗
∗
@**:目标对象</br> **
@∗∗:目标对象</br>∗∗^:所有的依赖对象
$<:依赖对象中的第一个
伪对象:不管对象是否最新,是否存在,每次都需要为对象生成执行命令
.PHONY;声明伪对象 举例: .PHONY: clean
wildcard:获取名称
patsubst:内容替换
方法一:
1 src=$(wildcard ./*.c)
2 obj=$(patsubst %.c,%.o,$(src))
3 main:$(obj)
4 gcc $^ -o $@
5 %.o :%.c
6 gcc -c $< -o $@
7 .PHONY:clean
8 clean:
9 rm *.o main
方法二:
c=gcc
s=mian.c //假设现在有一个mian.c文件
main:$(s)
$(c) $(s) -o out
clean:
rm *.o
Makefile中变量赋值方式:各有什么不同
= 在等号右侧的值是变量的值,右侧的值可以定义在文件中的任何一处,也就是说,右侧 中的变量不一定非要是已经定义好的值,其也可以使用后面定义的值。也就是说用=赋值的变量,在被解析时他的值取决于最后一次赋值时的值,所以你看变量引用的值时不能只往前面看,还要往后面看。
= 在等号右侧的值是变量的值,右侧的值可以定义在文件中的任何一处,也就是说,右侧 中的变量不一定非要是已经定义好的值,其也可以使用后面定义的值。也就是说用=赋值的变量,在被解析时他的值取决于最后一次赋值时的值,所以你看变量引用的值时不能只往前面看,还要往后面看。
:= 用:=来赋值的,前面的变量不能使用后面的变量,只能使用前面已经定义好了的变量。
?= 如果变量前面并没有赋值过则执行这条赋值,如果前面已经赋值过了则本行被忽略。(所谓的没有赋值过其实就是这个变量没有被定义过)
+= 用来给一个已经赋值的变量接续赋值(把这次的值加到原来的值的后面)有点类似于strcat函数。(在shell makefile等文件中,可以认为所有变量都是字符串,+=就相当于给字符串stcat接续内容)(注意一个细节,+=续接的内容和原来的内容之间会自动加一个空格隔开)
注意:Makefile中并不要求赋值运算符两边一定要有空格或者无空格,这一点比shell的格式要求要松一些。
git:项目版本管理工具(分布式版本管理)
svn:项目版本管理工具(集成式版本管理)
git基本操作:
下载服务器上的代码:
git clone github的地址
修改代码后,本地提交(本地管理):
git add 新文件
git commit -m “本次提交备注信息”
将本地修改提交到服务器:
git push origin master
master是git项目版本的主分支