Linux基础开发工具
一.软件包管理器
什么是软件包管理器,类似于手机中的应用商店,在linux下我们可以通过软件包管理器,在linux下下载软件。通常安装一个程序需要下载编译它的源代码,最终得到可执行程序,而软件包管理器的作用就是储存别人软件开发者上传的源代码,我们只需要下载编译即可使用程序。
软件通常存储在远程的软件包服务器中,我们通过自己的云服务器来申请下载请求下载文件,通常这些软件都是免费的。
那么为什么开发者会无偿提供这些免费的软件给我们下载呢?这就涉及到操作系统的生态环境了。一个操作系统是否能够生存取决于是否有人使用且长时间有人进行维护,我们拿安卓系统和鸿蒙系统进行比较,安卓系统可支持使用的软件比鸿蒙系统的多,可以满足我们日常需求,而鸿蒙系统处于起步阶段,系统包含的可用程序少自然就很少人使用。所以软件开发者为了维护自己系统的生态,会将软件包编译发布到服务器上供我们使用。
二.Vim编辑器
2.1 Vim的基本概念
Vim是一个高效的文本编辑器,可以用来编写代码,编辑配置文件或处理文本任务。支持多种系统。
我们可以通过vim + 文件名 的方式进入编辑器内。
Vim中有许多模式,在这里只介绍四种模式,命令模式,插入模式,底行模式,视图模式。
下面我们就逐个介绍
命令模式
当我们进入Vim时默认是命令行模式,命令模式类似于中心轴,它是连接其他模式的起点。我们可以通过键盘的快捷键控制屏幕光标移动复制粘贴等工作。
插入模式
在命令模式下,键盘输入 i 即进入插入模式,在该模式下我们可以编写代码书写文本等操作,当我们想回退到命令行模式时,按下Esc。
底行模式
在命令行模式下按下shift + ; 也就是 :进入底行模式,我们可以在该模式下保存退出文件替换,替换字符等操作。当我们想回退到命令行模式时,按下Esc。
视图模式
在命令模式下Ctrl + v进入,该模式用于批量修改文本或者批量注释等批量操作。在选中操作范围后shift + i 也就是 I 跳转到插入模式进行文本修改,最后Esc退回到命令模式即修改完成。
2.2 Vim的命令集
从命令行模式进入时,输入 i 是从光标当前位置开始输入,输入 a 是从光标位置下一个位置开始输入,输入 o 是插入新的一行从行首开始输入。
移动光标
按 G 移动到文章最后 ,按 ^ 移动到光标该行行首,按 $ 移动到光标该行行末,按 gg 进入文本开始,按 #l 跳转到 #行(#是数字),按 h j k l 分别表示光标左上下右方向(键盘的上下左右也可以)。
删除文字
按 x 删除一个字符,按 #x 删除光标后的 # 个字符,按 dd 删除光标所在行,按 #dd 从该光标开始删除 # 行。
复制
按 yy 复制该行,按 #yy 复制 # 行,按 p 粘贴复制内容,按 #p 复制 # 行的p内容。
撤回
按 u 撤回上一次命令,按 Ctrl + r 撤回撤回的命令。
三. 编辑器gcc/g++
gcc是款编译器,可以支持编程多款语言,我可以控制编译的四个阶段,预处理,编译,汇编,链接操作。
3.1 编译的四个阶段
预处理
处理#include的指令,将文件内容直接插入到源文件中;替换#define指令,替换为定义的文本;删除所有注释。
gcc -E 源文件 -o 目标文件
编译
在编译阶段会检查语法错误,语句书写规范性,之后再转换为汇编语言。
gcc -S 源文件 -o 目标文件
汇编
将汇编指令转为机器能够识别的二进制代码。
gcc -c 源文件 -o 目标文件
链接
将多个目标文件和库文件组合成一个可执行的文件。
gcc 源文件 -o 目标文件
3.2 动态链接和静态链接
动态链接指在链接时远程调用,编译器只需要知道地址即可,不需要将内容拷贝到文件中。而静态链接就是把内容拷贝到文件中,这样虽然编程速度会更快,但是文件的内容也会增大很多。
四. make/Makefile
4.1 基本概念
make是一个命令,makefile是一个文件,makefile的作用就是自动化编译,我们可以事先将文件写好通过make命令来运行makefile文件。
4.2 基本使用
我们先 touch 一份 Makefile 文件,用vim打开。
code.c是code方法的依赖关系,而下面的gcc操作就是code的依赖方法。同理可得clean也是如此。.PHONY为总是被执行,vim为追求效率方法只能只能使用一次,若加上了.PHONY则可以重复执行。
4.3 推导
类似于递归的逻辑,我们可以将编译分为四步来实现,通过依赖关系依赖方法 。例如上图,code方法实现依赖code.o,code.o的实现依赖code.s,code.s的实现依赖code.i,code.i的实现依赖code.c,code.c预处理得到code.i,code.i编译得到code.s,code.s汇编得到code.o,code.o链接得到code。实现了code。
编辑器若未找到该方法的依赖对象,会将该方法放入栈内,依次进行入栈,在找到依赖关系后再依次出栈。
下面我们再来看一种进阶的用法
如上图BIN,CC,SRC等都是文件名,这些文件中包含了指令以及文件名。通过$( ) 的方式来引用文件,类似于模板第二块表达的意思即可翻译成,code.exe:code.c gcc -o code.exe code.c 。通过这个模板,当我们想要更改文件来实现该方法时只需要在上方改文件名即可,不需要通篇的进行修改。
希望各位大佬多多支持!!!