1Linux编辑器-vim使⽤
1.1vim的基本概念
vim是linux下的编辑器,⽬前掌握这3种即可,分别是命令模式(command mode)、插⼊模式(Insert mode)和底⾏模式(last line mode),各模式的功能区分如下:

1.2 vim的基本操作
• 进⼊vim,在系统提⽰符号输⼊vim及⽂件名称后,就进⼊vim全屏幕编辑画⾯
• 不过有⼀点要特别注意,就是你进⼊vim之后,是处于正常模式,你要切换到插⼊模式才能够 输⼊⽂字。
• 正常模式切换⾄插⼊模式

• ⽬前处于插⼊模式,就只能⼀直输⼊⽂字,如果发现输错了字,想⽤光标键往回移动,将该字删 除,可以先按⼀下「ESC」键转到正常模式再删除⽂字。当然,也可以直接删除
• 正常模式切换⾄末⾏模式
输入 shift+; 其实就是:
退出vim及保存⽂件,在正常模式下,按⼀下「:」冒号键进⼊「Last line mode」,例如:

1.3 vim正常模式命令集
插⼊模式



1.4 vim末⾏模式命令集


1.5 vim操作总结
2. 编译器gcc/g++
背景知识

2.1.1 预处理(进⾏宏替换)

2.1.2 编译(⽣成汇编)
2.1.3 汇编(⽣成机器可识别代码)

2.1.4 连接(⽣成可执⾏⽂件或库⽂件)

2.2 动态链接和静态链接
在我们的实际开发中,不可能将所有代码放在⼀个源⽂件中,所以会出现多个源⽂件,⽽且多个源⽂ 件之间不是独⽴的,⽽会存在多种依赖关系,如⼀个源⽂件可能要调⽤另⼀个源⽂件中定义的函数, 但是每个源⽂件都是独⽴编译的,即每个*.c⽂件会形成⼀个*.o⽂件,为了满⾜前⾯说的依赖关系,则 需要将这些源⽂件产⽣的⽬标⽂件进⾏链接,从⽽形成⼀个可以执⾏的程序。这个链接的过程就是静 态链接。
静态链接的缺点很明显:

动态链接 的基本思想是把程序按照模块拆分成各个相对 独⽴部分,在程序运⾏时才将它们链接在⼀起形成⼀个完整的程序,⽽不是像静态链接⼀样把所有程序模块都链接成⼀个单独的可执⾏⽂件。 动态链接其实远⽐静态链接要常⽤得多。
2.3 静态库和动态库

2.4gcc其他常⽤选项 了解即可
3.⾃动化构建-make/Makefile
• make是⼀条命令,makefile是⼀个⽂件,两个搭配使⽤,完成项⽬⾃动化构建。
3.1基本使⽤
实例代码
cpp
#include <stdio.h>
int main()
{
printf("hello Makefile!\n");
return 0;
}
Makefile⽂件
cpp
myproc:myproc.c
gcc -o myproc myproc.c
.PHONY:clean
clean:
rm -f myproc
依赖关系
• 上⾯的⽂件myproc,它依赖myproc.c
依赖⽅法
• gcc -o myproc myproc.c ,就是与之对应的依赖关系
项⽬清理
• 像clean这种,没有被第⼀个⽬标⽂件直接或间接关联,那么它后⾯所定义的命令将不会被⾃动 执⾏,不过,我们可以显⽰要make执⾏。即命令⸺⸺"make clean",以此来清除所有的⽬标 ⽂件,以便重编译。clean 目标的本质是删除创建的不需要的临时文件
• 但是⼀般我们这种clean的⽬标⽂件,我们将它设置为伪⽬标,⽤ .PHONY 修饰,伪⽬标的特性 是,总是被执⾏的。
cpp
$ stat XXX
File: 'XXX'
Size: 987 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1321125 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ whb) Gid: ( 1000/ whb)
Access: 2024-10-25 17:05:30.430619002 +0800
Modify: 2024-10-25 17:05:25.940595116 +0800
Change: 2024-10-25 17:05:25.940595116 +0800
⽂件 = 内容 + 属性
Modify: 内容变更,时间更新
Change:属性变更,时间更新
Access:常指的是⽂件最近⼀次被访问的时间。在Linux的早期版本中,每当⽂件被访问时,其
atime都会更新。但这种机制会导致⼤量的IO操作。具体更新原则,不做过多解释。
.PHONY:让make忽略源⽂件和可执⾏⽬标⽂件的M时间对⽐
3.2推导过程
cpp
myproc:myproc.o
gcc myproc.o -o myproc
myproc.o:myproc.s
gcc -c myproc.s -o myproc.o
myproc.s:myproc.i
gcc -S myproc.i -o myproc.s
myproc.i:myproc.c
gcc -E myproc.c -o myproc.i
.PHONY:clean
clean:
rm -f *.i *.s *.o myproc
编译
cpp
$ make
gcc -E myproc.c -o myproc.i
gcc -S myproc.i -o myproc.s
gcc -c myproc.s -o myproc.o
gcc myproc.o -o myproc

• make是如何⼯作的,在默认的⽅式下,也就是我们只输⼊make命令。那么:




