常用工具:
1. yum 软件包管理器
2. vim 文本编辑器
3. gcc 编译器
4. makefile 项目编译工具
5. gdb 调试器
6. git
1. yum 软件包管理器
1.1查看可安装的软件包
安装软件包
移除软件包
su root 转到root
yum list | grep** yum instal yum remove
yum instal gcc yum instal gcc_c++
yum instal gdb yum instal lrzsz
2. vim 编辑器
对文本的操作:插入数据 保存 删除 复制 粘贴 剪切 滚动输入位置
vim 为了能够实现所有的操作,因此有很多的模式,每个模式下所完成的功能各不相同
vim共有12种模,6种基本,6中常见,最常用的:插入模式,普通模式, 底行模式
模式切换:
普通模式切换插入模式:
i 从光标所在位置开始插入
a 光标向后移动一个字符,开始插入
o 光标所在行下方添加新行,开始插入
I 光标移动到行首,开始插入
A 光标移动到行尾,开始插入
O 光标所在行上方添加新行,开始插入
插入模式切换普通模式:
esc
普通模式切换底行操作
:
底行模式的操作
:w 保存
:q 退出
:q! 强退(不保存)
:wq 保存并退出
:p!wq 临时执行命令,回车返回
普通模式下的操作:
移动光标
kjhl 上下左右
w b 光标按单词左右移动
gg=G 全文缩进对齐
ctrl +f /ctrl +b 上下翻页
G gg 移动光标到文档尾行/首行
复制
yy 复制光标所在行
nyy 从光标所在行开始复制n行数据
复制一个单词的步骤
1.按v进入选中模式
2.移动光标选中文本
3.按y复制选中内容
4.按p粘贴到制定位置
粘贴
p 向光标所在行的下一行粘贴新行
P(大写) 向光标所在行上方粘贴新行
剪切
dd 剪切光标所在行
ndd 剪切光标所在行向下n行数据
dw 剪切光标所在位置的单词
x 剪切光标所在位置的字符
s 删除光标所在字符,进入插入模式
其他操作
u 撤销上一次操作
ctrl+r 还原撤销的操作
v 进入视图选中模式(行选中)
ctrl +v 列选中
3.gcc编译器:将高级语言代码编译成为机器可识别的指令代码(编译C语言)
编译步骤
1.预处理:展开所有代码
2.编译:纠错,没有错误则将C语言代码编译成汇编代码
3.汇编:将汇编代码编译成为机器指令代码
走完汇编只是将当前的.c文件编译成了机器指令代码
其他函数还没有拿过来,这个文件虽然是机器指令代码
但是不能执行
4.链接:将所有调用的代码实现拿过来生成可执行程序
将其他文件中调用的函数拿过来,跟自己的程序合起来生成
可执行文件
库:存放函数实现的代码 (ls )
动态库:
生成可执行程序,链接动态库成为动态链接
lib***.so
动态链接:链接动态库,只会记录动态库位置符号信息
代码冗余小,占用资源少,但是对库的依赖性高
静态库:
生成可执行程序,链接静态库成为静态链接
lib***.a
静态链接:链接静态库,直接将库文件中的代码拷贝到可执行程序中
代码冗余量高,占用资源多,但是对库的依赖程度低
gcc编译器默认连接方式是动态链接
gcc常用选项:
-E 仅预处理
-S 仅编译
-C 仅汇编
-O 指定生成的文件名称
-static 链接方式指定为静态链接
Makefile
就是一个文件,但是有一个make命令,逐步
执行makefile中记录的编译规则
Makefile就是用于记录项目编译规则的,辅助项目的自动化编译
命名:Makefile makefile
注释以#开头
编写规则:
预定义变量
$@ 指目标对象
$^ 指所有依赖对象
$< 所有依赖对象的第一个
wildcard 获取文件名
$() 将命令的执行结果赋值给别的变量
目标对象:不一定要生成,而是为了让make能够找到依赖关系
依赖对象:主要是判断目标对象是否是最新的
.PHONY 声明伪对象
伪对象:不管是不是最新的,每次都要重新生成
目标对象:依赖对象
[tab]为了生成目标对象所执行的命令
main:main.c child.c
gcc main.c child.c -o main
例一 SRC=$(wildcard ./*.c)
main:$(SRC)
gcc -o $@ $^
例二 SRC=$(wildcard ./*.c)
ALL: main main1
main:$(SRC)
gcc -o $@ $^
main1:$(SRC)
gcc -static -o $@ $^
.PHONY:clean //防止当前目录下有和clean文件名称一样的文件
clean:
main main1
执行规则:make程序到当前目录下
makefile只为了生成第一个目标对象而存在,假如目标对象已经存在,
make会判断依赖对象和目标对象的时间,判断目标对象是否是最新的,
如果是最新的,则不需编译,直接退出,不是最新的则重新生成
makefile这个特性导致只生成第一个程序,因此后边如果还有目标对象
是不会生成的;
** 但是makefile有个其他特性,如果依赖对象不存在,则会在makefile
中查找依赖关系,看能不能生成这个依赖对象,如果有则生成,
没有就报错退出
1.到当前目录下查找makefile文件,找不到报错
2.在文件中找到第一个目标对象,并把这个对象当作终极目标
3.检测这个目标对象和依赖对象的最后一次修改时间,判断是否需
要重新编译,如果修改时间一样,则不需要重新编译,退出
4.如果目标对象不存在则直接生成,但是依赖对象有可能不存在
5.为了生成终极目标,首先要保证依赖对象都存在,所以会去先生成
所有的依赖对象(依赖对象生成的依赖关系夜市用户在下边定义的)
声明伪对象: .PHONY (生成什么文件后面就写什么文件)
伪对象:每次都要重新生成
假如当前目录下有多个makefile的时候(makefile/Makefile),优先是makefile
但是make
****************** makefile中 = := ?= |=的区别?********************
src=$(wildcard ./*.c)
obj=$(patsubst %.c,%.o,$(src))
main:$(obj)
gcc $^ -o $@
%.o:%.c
gcc -c $< -o $@
clean:
rm -f $(obj) main
4.gdb调试工具:
1.在编译程序的时候,向可执行程序中添加调试符号信息(-g选项功能)
gcc -g
2.运行gdb加载程序
gdb ./main
3.调试操作:
run :直接运行代码;并且程序的命令行参数在这里赋值
start:逐步调试
list:查看代码
step:下一步 跟踪进入函数
next:下一步 不跟踪进入函数
until:直接运行到指定行
p: 打印变量内容
bt: 查看函数调用栈信息
b: 打断点
line 向当前调试文件指定行打断点
file:line 向指定文件的指定行打断点
func 给函数打断点
info:查看信息
info break 查看断点信息
watch 变量监控(变量内容发生改变就停下来)
watch var watch+变量名
delete 删除断点
b 删除所有断点
b n 删除序号为n的断点
disable b 禁用断点
continue 继续运行
5.git项目版本控制工具:分布式管理
svn项目版本控制工具:集中式管理
linux下git使用:
git clone https 从github上克隆代码到当前路径
git add file 添加要提交的文件
git commit -m “desc”本地提交
git push 上传代码
了解git的分支管理(git精华)
git使用ssh
生成ssh密钥
ssh-keygen 提示信息直接回车即可
家目录下 .ssh 目录下id_rsa.pub文件中的内容就是公钥信息
复制公钥信息,到git个人设置的sshkey中