目录
一、vim
1.vim的模式
2.vim的命令集
(1):命令模式 (2):底行模式
3.vim配置
二、gcc
1.gcc格式及选项
2.工作布置
三、自动化构建工具makefile
1.基本使用方法
2.配置文件解析
3.拓展
在linux操作系统的常用工具中,常用vim来进行程序的编写;然后用gcc来生成执行文件,最终运行程序。本文来向大家介绍下vim和gcc,以及最后介绍自动化构建工具Makefile,这三个工具的使用方法。
在vim编译器中有很多不同的模式让我们进行操作,最为常用的模式有三种,分别是分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
正常/普通/命令模式(Normal mode):控制光标移动,通过输入的对应命令来实现增、删、改。同时也可以在此模式下进入插入模式(Insert mode)或者底行模式(last line mode)。
插入模式(Insert mode):在此模式下可以可以正常编写代码入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
末行模式(last line mode):文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。
那么,在三个模式之间该如何切换呢?
将命令模式转换为插入模式:按键盘上的a,i,o间即可
将插入模式转换为命令模式:按键盘上的Esc键即可
将命令模式转换为末行模式:按住键盘上的shift键再加上'+'号
将末行模式转换为命令模式:按键盘上的Esc键即可
注:其实任何模式要最终回到命令模式都只要无脑Esc即可。
(1)、命令模式:
1.进入插入模式
2.光标移动
3.复制、剪切(删除)行
4.删除文字
5.替换
(2)、底行模式:
1.列出行号
2.查找字符
3.跳到文件中的某一行
4.文件多开
5.保存文件
6.离开vim
gcc是在Linux操作系统中用来编译C语言代码,生成可执行程序的一个工具。同理,C++则是用来编译C++的工具。
格式:gcc [选项] 要编译的文件 [选项] [目标文件]
1. -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面,即完成预处理
2. -S 编译到汇编语言不进行汇编和链接,即完成编译
3. -c 编译到目标代码,即完成汇编
4. -o 文件输出到文件,即给gcc操作完成后的文件取名
5. -static 此选项对生成的文件采用静态链接
代码示例:
gcc –E hello.c –o hello.i
#选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程
#选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序
2.编译
对后缀为".i"的文件编译,编译器会首先检查代码是否规范,是否存在语法错误。确认无误后,把代码翻译为汇编语言,生成文件后缀为".s"。
代码示例:
gcc -S hello.i -o hello.s
#选项“-S”,该选项的作用是让gcc对文件完成编译后就停止,生成汇编代码而不进行汇编操作
3.汇编
对后缀为".s"的文件(汇编代码)进行汇编,生成机器能识别的语言,也就是目标文件。
代码示例:
gcc -c hello.s -o hello.o
#类似上"-c"表示执行完成汇编就停止
4.链接
目标文件与函数库完成链接,就会生成可执行程序,我们写的代码就能跑起来了。
代码示例:
gcc hello.o -o hello
接下来我们来详细了解一下何为函数库:
我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。
函数库一般分为静态库和动态库两种:
静态库:在链接时会把函数库中的代码全都复制到可执行文件中,因此经过静态链接生成的可执行文件较大。但是一旦链接完成就不再依赖函数库,即使库被干掉,可执行文件依然可以运行。
动态库:与静态链接相反,动态链接链接动态库时,只要在可执行文件中留下链接文件即可。在运行时用过链接文件来加载动态库,让可执行文件较小。但是可执行文件依赖函数库。
gcc默认使用动态库,如果要其使用静态库,加上选项"-static"即可。可以通过"file"指令来查看链接方式。
makefile是一个帮我们更加快捷进行文件编译的工具,如下是正常的使用gcc进行编译:
gcc -o test.c test #编译
./test #运行
rm -f test #删除
较为繁琐。为了简化操作,我们在目录下创建一个Makefile文件进行配置,配置如下:
test:test.c
gcc -o test test.c
.PHONY:clean
clean:
rm -f test
1.指令格式:make
代码示例:
make
在我们单光输入“make”的时候,文件会寻找Makefile文件中的第一个依赖关系,在上图中,也就是确定”test”要依赖“test.c”来实现。确定依赖关系之后,就会根据依赖方法来执行编译的命令,也就是图中的gcc的命令。
2.指令格式:make + 目标文件
代码示例:
make clean
在make之后跟上一个目标文件之后,系统会在Makefile文件中寻找匹配的依赖关系,上图中很明显会找到“clean”这个依赖关系。最后就会执行clean的依赖方法,完成删除操作。
3.伪目标
目标文件的依赖关系如果最近被执行过一次,那该目标文件就处于最新状态,make下次寻找到之后发现它是最新状态,就不会再次执行依赖方法。而被伪目标所修饰的目标文件,不论是否是最新的,执行他的依赖方法
1 test:test.c
2 gcc -o $@ $^
3 gcc -o test test.c
2.取消回显
在使用make相关指令的时候会进行命令的回显,如果想要取消回显,只需要在依赖方法前面加上"@“.