打开**/etc/vim/vimrc**文件
set ts=4 #设置TAB建为4空格
set nu #设置VIM显示行号
只写了部分常用指令,所有指令请详查VIM操作手册。
a 转为输入模式。
esc按键转为指令模式
指令模式
Ctrl+f 屏幕向下翻一页
Ctrl+b 屏幕向上翻一页
dd 删除该行,不提供修改功能。
nyy 复制当前行及其下面 n 行。
p 粘贴最近复制的内容。
u撤销上一步动作
底行模式
进入底行模式以后会在终端的左下角就会出现符号“:”,我们可以在“:”后面输入命令,常用的命令如下:
x 保存当前文档并且退出
q 退出。
w 保存文档。
q! 退出 VI/VIM,不保存文档
多个指令可以组合使用,比如** :wq**是退出保存。
gcc [选项] [文件名字]
-c: 只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
-o:<输出文件名>: 用来指定编译结束以后的输出文件名,如果使用这个选项的话 GCC 默认编译出来的可执行文件名字为 a.out。
-g: 添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。
-O: 对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
-O2: 比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。
Makefile描述了编译哪些源码文件、如何编译,以此实现了大工程文件的批量编译链接,而且只对变化修改的文件进行更新,提高了效率。Makefile具体功能如下:
1、如果工程没有编译过,那么工程中的所有.c 文件都要被编译并且链接成可执行程序。
2、如果工程中只有个别 C文件被修改了,那么只编译这些被修改的 C 文件即可。
3、如果工程的头文件被修改了,那么我们需要编译所有引用这个头文件的 C 文件,并且链接成可执行文件。
目标…… : 依赖文件集合……
命令 1
命令 2
……
缩进一定要使用TAB键,不能使用空格键。
main: main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
main.o: main.c
gcc -c main.c
input.o: input.c
gcc -c input.c
calcu.o: calcu.c
gcc -c calcu.c
clean:
rm *.o
rm main
. 首先更新第一条规则中的main,第一条规则的目标成为默认目标,只要默认目标更新了那么就认为Makefil的工作,完成了整个Makefile就是为了完成这个工作。
在第一次编译的时候由于main还不存在,因此第一条规则会执行,第一条规则依赖于文件main.o,input.o和calcu.o这个三个.0文件,这三个.o文件目前还都没有,因此必须先更新这三个文件。make会查找以这三个.o文件为目标的规则并执行。
以main.o为例,发现更新main.o的是第二条规则,因此会执行第二条规则,第二条规则里面的命令为"gcc-c main.c",这行命令很熟悉了吧,就是不链接编译main.c,生成main.o,其它两个.o文件同理。
最后一个规则目标是clean,它没有依赖文件,因此会默认为依赖文件都是最新的,所以其对应的命令不会执行,当我们想要执行clean的话可以直接使用命令"make clean",执行以后就会删除当前目录下所有的.0文件以及main,因此clean的功能就是完成工程的清理,"make clean"的执行过程如图3.4.1.1所示:
1,make命令会在当前目录下查找以Makefile(makefile其实也可以)命名的文件。
2、当找到Makefile文件以后就会按照Makefile中定义的规则去编译生成最终的目标文件。
3、当发现目标文件不存在,或者目标所依赖的文件比目标文件新(也就是最后修改时间比目标文件晚)的话就会执行后面的命令来更新目标。
#Makefile变量的使用
objects =main.o input.o calcu.o
main:$(objects)
gcc-o main $(objects)
= 变量的真实值取决于它所引用的变量的最后一次有效值
:= 不会使用后面定义的变量,只能使用前面已经定义好的
**?=**如果变量前面没有复制,在此赋值;如果已经赋过值,不做变化
+= 为变量追加字符。
表示对文件名的匹配,“%”表示长度任意的非空字符串,比如“%.c”就是所有的以.c 结尾的文件,类似与通配符, a.%.c 就表示以 a.开头,以.c 结束的所有文件。
使用方法
#在命令中不能使用模式规则,需要使用自动化变量
%.o : %.c
命令
所谓自动化变量就是这种变量会把模式中所定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中,常用的自动化变量如表
Makefile 有一种特殊的目标——伪目标,一般的目标名都是要生成的文件,而伪目标不代表真正的目标名,在执行 make 命令的时候通过指定这个伪目标来执行其所在规则的定义的命令。
#清除工程的功能
clean:
rm *.o
rm main