Vi文本编辑器
Vi文本编辑器有三个模式,1:命令模式 2:插入模式 3:底行模式
1:命令模式:最初进入Vi时为命令模式,只能浏览内容 ,复制,粘贴,删除,但是无法编辑。
命令模式下的几个功能键:
Ctrl + b:屏幕往后翻一页
Ctrl + f:屏幕往前翻一页
yy:复制当前光标所在行
[n]yy:复制当前光标开始的n行
p:将复制内容粘贴到光标所在行
dd:删除当前光标所在行
[n]dd: 删除当前光标开始的n行
/name: 查找光标之后的名为“name”字符串
?name:查找光标之前的名为”name”字符串
G:光标移动到文件尾(大写)
nG:光标移到第n行
u: 取消之前的操作
2:插入模式:按i或insert从命令模式进入插入模式,编辑文件内容。按【esc】退出插入模式,进入命令模式。
3:底行模式:在命令模式下按“:”进入底行模式,w保存光标位于屏幕的底行,用户保存文件或退出操作,也可设置编译环境,如查找字符串,列出行号。
底行模式下的几个功能键:
q:退出
q!:强行退出
wq:保存退出
w【filename】:另存为filename的文件
set nu:显示行号
set nonu:取消行号
Vi的基本流程
(1):进入VI,在命令行下输入vi hello(文件名),进入命令模式,光标位于屏幕上方。
(2):在命令行模式下键入i进入插入模式,在屏幕下方有“插入”或“insert”,编辑文本。
(3):在插入模式下键入esc进入命令模式,再键入:在底行中输入wq,保存退出。
Gcc编译器
Gcc能够编译c,c++和Object c等语言写的程序。
Gcc编译流程:4个步骤
1:预处理 2:编译 3:汇编 4:链接
1:预处理阶段:Gcc把头文件(如stdio.h)编译进来,用-E查看
指令格式:gcc –E hello.c –o hello.i
2:编译阶段:检查代码的规范性,错误等,把代码翻译成汇编语言,用-s查看
指令格式:gcc –s hello.i –o hello.s
3:汇编阶段:把.s文件转换成目标文件,用-c查看
指令格式:gcc –c hello.s –o hello.o
4:链接阶段:系统把函数的实现都做到libc.so.6的函数库中。
指令格式:gcc hello.o –o hello
运行可执行文件: ./hello
添加头文件:-I dir linux头文件默认放到了“/usr/include/”目录下,当用户希望添加放置在其他位置上的头文件时,就要用“-I dir”选项来指定。例如放在hello.h放在“/root/workplace/”
格式:gcc hello.h -I /root/workplace/ -o hello
添加库文件:-L dir linux头文件默认放到了“/usr/lib/”目录下,当用户希望添加放置在其他位置上的库文件时,就要用“-L dir”选项来指定。例如放在hello.h放在“/root/workplace/”
格式:gcc hello.h -L /root/workplace/ -o hello
Gcc所支持的后缀名
后缀名 | 对应的语言 | 后缀名 | 对应的语言 |
.c | C原始程序 | .s | 汇编原始程序 |
.C/.cc/.cxx | C++源程序 | .h | 头文件 |
.m | Object c源 | .o | 目标文件 |
.i | 预处理过的c | .a/.so | 编译后的库文件 |
.ii | 预处理过的c++ |
|
|
Gcc编译选项列表
后缀名 | 所对应的语言 |
-S | 只是编译不汇编,生成汇编代码 |
-E | 只进行预编译,不做其他处理 |
-g | 在可执行程序中包含标准调试信息 |
-o file | 把输出文件输出到file里 |
-v | 打印出编译器内部编译各过程的命令行信息和编译器的版本 |
-I dir | 在头文件的搜索路径列表中添加dir目录 |
-L dir | 在库文件的搜索路径列表中添加dir目录 |
-static | 链接静态库 |
-llibrary | 连接名为library的库文件 |
Gcc警告出错选项列表
选项 | 含义 |
-ansi | 支持符合ANSI标准的C程序 |
-pedantic | 允许发出ANSI C标准所列的全部警告信息 |
-pedantic-error | 允许发出ANSI C标准所列的全部错误信息 |
-w | 关闭所有告警 |
-Wall | 允许发出Gcc提供的所有有用的报警信息 |
-werror | 把所有的告警信息转化为错误信息,并在告警发生时终止编译过程 |
GDB调试器
调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好更快地定位程序中的问题从而加快程序开发的进度,是大家共同面对的。就如读者熟知的 Windows 下的一些调试工具, VC 自带的如设置断点、单步跟踪等, 都受到了广大用户的赞赏。那么, Linux用的就是GDB调试器。
在对源程序用gcc进行编译时,必须加上选项“-g”选项才可以进行调试。
Gdb调试的是可执行文件,不是源代码文件。
输入 gdbhello(可执行文件)
可以看到在启动画面看出gdb版本号等。
几个功能健和使用流程:
1:l(list)查看所载入的文件。
2:b(break)行号/if条件表达式,设置断点 ,设置断点后程序在指定行之前停止
3:info b 查看断点情况
4:r(run)运行代码 ,程序在断点处停止。
5:p + 变量 查看变量值,只有程序在运行或暂停的情况下才可查看变量值
6:n(next)单步运行,不会进入函数
7:s(step)单步运行,会进入函数
8:c(continue)恢复正常运行
Makefile工程管理器
在实际的项目中,由于文件较多,当文件修改之后,不可能又一个个去编译,只需把最近更新的文件编译一下就好了,makefile就是能够根据文件时间自动发现更新过的文件,减少编译的工作量。
1:makefile基本结构
Target(目标文件):files(依赖文件)
Command(命令)
建立makefile文件。vi makefile
例:hello.o:hello.chello.h
Gcc –chello.c –o hello.o
在makefile中的一个command前必须有“TAB”符。
使用make的格式为:make target。
2:makefile变量
在依赖文件较多的时候一个个写是比较麻烦的,特别是需要修改的时候,这是我们一般把依赖文件写出一个变量。定义格式 VAR=var,使用是格式为:$(var)。
例:源指令:target1:file1.o file2.o file3.o
Gccfile1.o file2.o file3.o –o target1.o
用变量写:objs= file1.o file2.o file3.o
CC = gcc
$(CC)$(objs) -o target1
3:自动变量
命令格式 | 含义 |
$* | 不包含扩展名的目标文件名称 |
$+ | 所有的依赖文件,以空格分开,并以出现的先后顺序,可能包含重复的依赖文件 |
$< | 第一个依赖文件的名称 |
$? | 所有时间戳比目标文件晚的依赖文件,并以空格分开 |
$@ | 目标文件的完整名称 |
$^ | 所有不重复的依赖文件,以空格分开 |
$% | 如果目标是归档成员,则该变量表示目标的归档成员名称 |
例:源指令:target1:file1.o file2.o file3.o
Gccfile1.o file2.o file3.o –o target1.o
改后: objs = file1.o file2.o file3.o
CC = gcc
$(CC) $^ -o$@