目录
一、Vim
1.vim安装
默认的Linux -- vim编辑器有三大致命缺陷:
-
界面太过简单,可以说是简陋
-
编写程序时没有基本的自动缩进、高亮、自动补全等许多Windows编译器都有的功能,使得用起来极度不方便
-
没有代码查错功能
我现在使用的服务器是Ubuntu 20.04,后面讲centos下的配置,先讲我当前的vim配置方案,使用的是vimplus
详细介绍请看
安装步骤:
在对应用户的家目录安装,
cpp
//配置vimpulus
git clone --depth=1 https://gitee.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
./install.sh
//如果插件不会生效, 重新执行下面指令:
sudo apt install vim-youcompleteme
vim-addon-manager install youcompleteme
也可按照以下顺序无脑安装:
cd ~
sudo apt update
sudo apt install git build-essential cmake python3-dev python3-pip -y
git clone https://github.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
./install.sh
再输入y 输入3 等待安装成功
出现这个就是安装完成

这时创建一个cpp文件发现界面被替换成功了。
还有一个我之前在Centos7.6环境下使用的配置,很好用,但是目前只能在centos7.6使用,只要输入命令行可以一键安装,curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh,想进一步了解可以打开下面链接


2.vim使用
vim本质上就是一个多模式的文本编辑器,我们可以在里面编写代码。
这里我来介绍vim最常用的三种模式:命令模式、插入模式、底行模式。
**命令模式:**主要用于控制光标移动、文本的删除(剪切)、复制与粘贴等快捷操作。
插入模式: 唯一的文本输入模式。日常编写代码或文字时使用最频繁的模式。按 i、a、o 等键进入,按 Esc 键返回命令模式。
底行模式: 用于执行保存退出、查找替换(字符串)等全局操作。在命令模式下输入 : 进入。

①命令模式------>插入模式
-
输入「i」:在当前光标处进入插入模式。
-
输入「a」:在当前光标的后一位置进入插入模式。
-
输入「o」:在当前光标处新起一行进入插入模式。
②命令模式------>底行模式
- 输入「Shift+;」
③插入模式或底行模式------>命令模式
- Esc
这个图片是vim常用的命令

二、gcc和g++
gcc编译器是专门用来编译C语言的,而g++编译器主要用来编译C++,也可以用来编译C++。
就是进行了如下四个步骤 预处理(预编译),编译,汇编,链接,将我们的源文件生成可执行程序
可输入下面指令进行安装:
cpp
Ubuntu
bash
# 安装GCC和G++
sudo apt install gcc g++ -y
# 验证安装
gcc --version
g++ --version
CentOS
bash
sudo yum install gcc-c++ -y
# 验证安装
gcc --version
g++ --version
使用语法
gcc/g++ 【选项】 要编译的文件 【选项】 目标文件

1.预处理
cpp
gcc -E test.c -o test.i //预处理后的文件名用.i结尾
-
预处理功能主要包括头文件展开、去注释、宏替换、条件编译等。
-
预处理指令是以#开头的代码行。
-
-E选项的作用是让gcc/g++在预处理结束后停止编译过程。
-
-o选项是指目标文件,"xxx.i"文件为已经过预处理的原始程序。


2.编译
cpp
gcc -S test.i -o test.s
-
gcc/g++首先检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,将代码翻译成汇编语言。
-
用户可以使用-S选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
-
-o选项是指目标文件,"xxx.s"文件为已经过翻译的原始程序。

3.汇编
cpp
gcc -c test.s -o test.o
把编译阶段生成的"xxx.s"文件转成目标文件.o。
使用-c选项就可以得到汇编代码转化为"xxx.o"的二进制目标代码

4.链接
cpp
gcc test.o -o test

-
gcc/g++不带-E、-S、-c选项时,就默认生成预处理、编译、汇编、链接全过程后的文件test。
-
若不用-o选项指定生成文件的文件名,则默认生成的可执行文件名为a.out。
静态库与动态库
函数库一般分为静态库和动态库两种:
-
静态库是指编译链接时,把库文件的代码全部加入到可执行文件当中,因此生成的文件比较大,但在运行时也就不再需要库文件了,静态库一般以.a为后缀。
-
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件当中,而是在程序运行时由链接文件加载库,这样可以节省系统的开销,动态库一般以.so为后缀。
gcc默认生成的二进制程序是动态链接的

ldd test 是查看test程序所依赖的库
静态链接

动态链接就是程序还未加载到内存时,就已经和动态库建立了信息上的连接,执行到库函数的时候,跳转到动态库执行,然后继续执行自己的代码。优点是节省资源,缺点是一旦丢失,所有程序都无法运行。
静态链接就是把你用的方法,拷贝到可执行程序里。
静态链接的优点:不依赖任何库,自己独立就能运行。
缺点:体积大,占据资源多(占据磁盘空间,内存空间),加载速度受影响。
三、Makefile和make
-
一个工程的源文件不计其数,按照其类型、功能、模块分别放在若干个目录当中,Makefile定义了一系列的规则来指定:哪些文件需要先编译,哪些文件需要后编译,甚至于进行更复杂的功能操作。
-
Makefile带来的好处就是"自动化编译",一旦写好,只需一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
-
make是一个命令工具,是一个解释Makefile当中指令的命令工具
-
make是一条命令,Makefile是一个文件
使用vim 编写Makefile文件
Makefile文件最简单的编写格式是,先写出文件的依赖关系,然后写出这些文件之间的依赖方法,依次写下去。

保存退出直接make 就可得到目标文件
也有Makefile文件的简写方式

.PHONY
格式:.PHONY: XXX 作用:修饰后XXX对应的方法总是要被执行的。
上方make使用一次后就不能继续使用了,是因为此时生成的可执行程序已经是最新的了,不需要更新。如果这里的目标文件也被,PHONY修饰,也可以一直执行。
这里的更新实际是对比可执行文件和源文件的各自的最近修改时间,如果可执行文件最新,就不会编译,如果源文件最新,就会重新编译(即新旧时间的对比)。

-
$@:表示依赖关系中的目标文件(冒号左侧)。 -
$^:表示依赖关系中的依赖文件列表(冒号右侧全部)。 -
$<:表示依赖关系中的第一个依赖文件(冒号右侧第一个)。
项目清理
重新编译前通常需清理旧的中间文件和可执行程序。由于手动清理既繁琐且指令固定,我们可以将清理指令写入 Makefile 中,实现一键清理。
就是上面的clean

一般将这种clean的目标文件设置为伪目标,用.PHONY修饰,伪目标的特性是:总是被执行。