壹 Linux 编辑器 - vim 使用
1.1 vim 的基本概念
vim 主要有三种模式,分别是、和。
Linux 基础开发工具涵盖编辑器 vim、编译器 gcc/g++ 及自动化构建工具 make/Makefile。vim 提供命令、插入和底行三种模式,支持光标控制、文本编辑与查找替换。gcc 编译流程包含预处理、编译、汇编和链接四步,涉及宏定义、条件编译及动静态库机制。make 通过 Makefile 管理依赖关系实现自动化编译,.PHONY 用于处理非文件目标。内容包含各工具的核心命令与典型应用场景。

vim 主要有三种模式,分别是、和。
模式的切换:

★ 命令前加数字能更快的进行批量操作
复制与粘贴与剪切
撤销
一旦退出文件编辑,无法再进行撤销了。没有退出都可以撤销。
替换
查找
批量注释



gcc [选项] 要编译的文件 [选项] [目标文件]
1. 预处理 (进行宏替换)
gcc -E hello.c -o hello.i
2. 编译(生成汇编)
gcc -S hello.i -o hello.s
3. 汇编(生成机器可识别代码)
gcc -c hello.s -o hello.o
4. 链接(生成可执行文件或库文件)
gcc hello.o -o hello

命令行级别的宏定义:
gcc test.c -o test -DM
gcc test.c -o test -DM=100
预处理的本质就是修改编辑我们的文本代码。
-DM 就是在文本文件中加入 #define M 100 这样的字符串。
条件编译的作用:
程序的发展是从二进制->汇编语言->C 语言->C++/JAVA等。每个阶段都经过了几十年的发展,C 语言出现时汇编语言已经很成熟了,把 C 语言翻译成汇编语言再转换成二进制要比直接翻译成二进制容易得多。
每个语言的发明都要有对应的编译器使他可以翻译成汇编语言,那汇编语言怎么编译成二进制呢?首先在汇编语言出现后,先要发明一个二进制版的编译器,然后用汇编语言写一个汇编编译器,用二进制版的汇编编译器编译一下汇编写的汇编编译器,最后二进制版的就可以不要了,直接用汇编版的进行编译,这就是编译器的自举过程。
库是一套方法或者数据集,为开发提供最基本的保证 (基本接口,功能,加速我们的二次开发)。
Linux 下的 C 语言库为 libc.so 和 libc.a,库的名字为去掉前缀 lib 和后缀.so/.a 后剩余的。
动态库:把动态库内部实现的方法和我们自己的程序链接起来,让我们自己的程序能在库中找到方法,形成可执行程序,动态库在执行库中的方法时需要跳转到库中执行,完了再返回。
根据地址的替换来定位。
动态链接的图示:


静态链接就是把库里的实现拷贝一份到我们自己的代码中,用时调用自己这份实现。静态库只有在链接时有用,一旦形成可执行程序,就不需要静态库了。
动静态库对比:
ldd 命令 - 显示所用库。C 程序默认动态链接

file 命令 - 具体查看类型


如果想要静态链接:


静态链接的可执行文件会大很多。 C++ 的情况:

动态库(共享库)的本质就是把语言层面的公共代码在内存中只出现一份。

普通用户在 sudo 时可能会出现以上报错。
解决步骤:
找到位置加入:

然后就完成了。

make 是一条命令,makefile 是一个文件,两个搭配使用,完成项目自动化构建。
makefile 带来的好处就是——'自动化编译',一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。

第一行为依赖关系; 第二行为tab + 依赖方法。

上图为使用 makefile 的方法。

make 命令扫描 makefile 文件的时候,从上向下扫描,默认形成第一个目标文件。


.PHONY 修饰的每次编译都执行。(本质上是说忽略判断新旧问题)
而一般来说 gcc 编译的不建议加.PHONY 修饰,如果源文件不改动,编译就不会执行。

Modify 时间是作为知道 bin 和.c 新旧的标准。



测试方法:

**@**符号让 make 不回显。
基于变量版的 Makefile(类似于宏)

BIN 和 SRC 也可以优化掉。



如果有多个文件呢?






微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online