如果你刚学习Linux,可以通过本篇来了解Vim与Makefile的基本使用
目录
一、Vim是什么?
1.1 Vim概念
1.2vim的使用
1.2.1命令模式
1.2.2输入模式
1.2.3底线命令行模式
二、Makefile/makefile
2.1Makefile编译
2.2语法规则
2.3变量
2.4伪目标.PHONY与all
在Linux下,makefile是一个非常重要的工具,它可以自动化编译和构建过程,但我们需要先进行编辑,这就需要我们先了解vim是什么。
一、Vim是什么?
1.1 Vim概念
官方的说法是:Vim 是一个高度可配置的文本编辑器,旨在非常高效地创建和更改任何类型的文本(Vim官网),它对于我们程序开发者来说,是一件非常好用的工具。
那我们了解之后,就可以进行文本编辑,也就是代码编写了
1.2vim的使用
(编写代码时,首先需要创建文件再进行编辑,如果你是小白的话,请看这里Linux基本指令)
Vim进入文件内部时,我们会发现鼠标和键盘都失效了,我们在键盘上按一下,会出现以下提示
即:光标下没有文件名
那么这个file name(文件名)是什么呢?接下来我们进行解答
1.2.1命令模式
当我们使用 Vim 进入文件内部,即刚刚启动Vim时,就进入了命令模式
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令 ,以下是一些基本命令
i | 切换到输入模式,在光标当前位置开始输入文本 |
x | 删除当前光标所在处的字符 |
: |
切换到底线命令模式,以在最底一行输入命令 |
a | 进入插入模式,在光标下一个位置开始输入文本 |
o | 在当前行的下方插入一个新行,并进入插入模式 |
0 | 在当前行的上方插入一个新行,并进入插入模式 |
dd |
删除当前行 |
yy | yy -- 复制当前行。 |
p | 粘贴剪贴板内容到光标下方 |
P | 粘贴剪贴板内容到光标上方 |
u | 撤销上一次操作 |
Ctrl + r |
重做上一次撤销的操作 |
:w | 保存文件 |
:q |
退出 Vim 编辑器 |
:q! | 强制退出Vim 编辑器,不保存修改 |
(命令模式只有一些最基本的命令,仍要依靠 底线命令行模式 输入更多命令)
当需要编辑文本时,我们按下了 i 进入了输入模式,此时我们输入的都是文本,那么怎样才能再次进入命令模式呢?接下来我们介绍输入模式
1.2.2输入模式
在命令模式下按下 i 就进入了输入模式,使用 Esc 键可以返回到普通模式
如果你是小白,请看下表
ENTER | 回车键,换行 |
BACK SPACE | 退格键,删除光标前一个字符 |
DEL | 删除键,删除光标后一个字符 |
HOME/END | 移动光标到行首/行尾 |
方向键 | 在文本中移动光标 |
Page Up/Page Down | 上/下翻页 |
Insert | 切换光标为输入/替换模式,光标将变成竖线/下划线 |
ESC | 退出输入模式,切换到命令模式 |
CRTL+Insert | 复制 |
SHIFT+Insert | 粘贴 |
1.2.3底线命令行模式
在命令模式下按下 :(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。基本的命令如下
w | 保存文件 |
退出 Vim 编辑器 | |
wq | 保存文件并退出 Vim 编辑器 |
强制退出Vim编辑器,不保存修改 |
二、Makefile/makefile
首先,Makefile是一个文件,我们了解Vim之后,才能编辑 Mkefile 文件。这个文件名必须叫做Makefile或者makefile,大小写皆可
Makefile,顾名思义,制造文件,那么它是如何制造的呢? 这就要谈到它的编译过程
2.1Makefile编译
Makefile文件中的命令有一定规范要求,该文件编辑好以后,在Linux命令行中执行一条make命令即可自动编译,编译完成后就会生成我们想要的文件,是不是很神奇?其实不然,Makefile只是实现了我们需要实现的代码,这些代码还是要自己定义。因此,有相应的语法规则
编译的过程可以笼统分为3步
1.make工具读取 makefile 文件,解析其中定义的规则和变量
2.检查依赖关系,即 哪个文件需要编译?生成哪个文件?
3.执行命令,执行我们编写的命令——编译或者删除文件
2.2语法规则
目标: 依赖项 命令 1 命令 2 ...
目标:生成的文件
如果目标文件的更新时间晚于依赖文件更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则会进行重新编译并更新目标文件。Makefile的第一个目标为终极目标(只生成终极目标的文件)
依赖项:目标文件由哪些文件生成,编译我们指定的文件
命令:通过执行命令由依赖文件生成目标文件
注意每条命令之前必须有一个tab保持缩进,这是语法要求(会有一些编辑工具默认tab为4个空格,会造成Makefile语法错误)
2.3变量
如果每次都需要输入文件名,是一件很麻烦的事,所以,makefile 可以用变量来替代文件名
$符号表示取变量的值,当变量名多于一个字符时,使用"( )"
$符的其他用法
$^ :表示所有的依赖文件
$@ :表示生成的目标文件
2.4伪目标.PHONY与all
.PHONY
用于clean,我们想要删除文件,但规定需要有一个依赖文件,此时我们就可以用伪目标.PHONY
此时clean为依赖文件,.PHONY为目标文件,编译时我们就会执行clean
all
当我们需要生成多个文件时,可以用all
执行后会生成多个文件