一、Vim的基本操作。
Normal模式下
1.h 键 向左移动光标 2. j 键 向下移动光标 3. k 键 向上移动光标 4. l键 向右移动光标
5.x 键 删除光标所在位置的字符 6.i 键 插入文本 7.dw 光标移至单词开头输入,删除整个单词
8.[number] +[command]+[object]
9.p 键 在光标处重新置入缓冲区内的字符 10.r +[字母] 可以替换光标处错误的单个字符 11 . [number]+ c + [object] 更改命令,cw更改单词,c$更改本行。
11.Ctrl+g 显示当前光标所在位置行数及文件信息。 12. Shift+g 跳到末尾行;[行数]+Shift+g 跳到指定行数。
13. / + [xxxx] 从前向后 搜索指定字段;n继续查找上次查找字段;Shift+ n 从相反方向查找 14.? +[xxxx] 从后向前搜索指定字段。
15. % 键 光标选中]})括号后按可以查看对应括号 16. :s/old/new 替换
17. :![command] 用来执行外部命令 18.:w [FILENAME]
19.o 在光标下方一行插入字符串 O 在光标上方一行插入字符串 20.a在光标所在位置之后插入 A 在光标所在行的末尾插入
21.R 进入替换模式,ESC退出、 21. :set [xxxx] 设置xxxx选项
二.GCC编译器
基本规则
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
编译过程
预处理:gcc –E hello.c –o hello.i; gcc –E调用cpp
生成中间文件 编 译:gcc –S hello.i –o hello.s; gcc –S调用ccl
翻译成汇编文件 汇 编:gcc –c hello.s –o hello.o; gcc -c 调用as
翻译成可重定位目标文件 链 接:gcc hello.o –o hello ; gcc -o 调用ld** 创建可执行目标文件
实验楼例题
但是编译发生错误。
三. GDB。
基本操作
·
gdb programm(启动GDB)
·
b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
·
run 开始运行程序
·
bt 打印函数调用堆栈
·
p 查看变量值
·
c 从当前断点继续运行到下一个断点
·
n 单步运行
·
s 单步运行
· quit 退出GDB
· display 跟踪变量值的改变
· until 跳出循环
· finish 跳出函数
· help 帮助
man 命令对其解释
四.MarkFile
基本介绍
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,
哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见makefile都成为了一种在工程方面的编译方法。
Makefile的规则
target ... : prerequisites ...
command
...
Makefile执行后的图...
目标:依赖
执行指令 ...
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)。
① prerequisites就是,要生成那个target所需要的文件或是目标。
② command也就是make需要执行的命令。(任意的Shell命令)
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行(command一定要以Tab键开始,否者编译器无法识别command),减少重复编译,提高了其软件工程管理效率。
定义变量
$*
不包含扩展名的目标文件名称。
$+
所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$<
第一个依赖文件的名称。
$?
所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$@
目标的完整名称。
$^
所有的依赖文件,以空格分开,不包含重复的依赖文件。
$%
如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称为
mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。
AR
归档维护程序的名称,默认值为 ar。
ARFLAGS
归档维护程序的选项。
AS
汇编程序的名称,默认值为 as。
ASFLAGS
汇编程序的选项。
CC
C 编译器的名称,默认值为 cc。
CFLAGS
C 编译器的选项。
CPP
C 预编译器的名称,默认值为 $(CC) -E。
CPPFLAGS
C 预编译的选项。
CXX
C++ 编译器的名称,默认值为 g++。
CXXFLAGS
C++ 编译器的选项。
FC
FORTRAN 编译器的名称,默认值为 f77。
FFLAGS
FORTRAN 编译器的选项。