【Linux】vim

embedded/2024/11/30 10:14:27/

🌻个人主页:路飞雪吖~

       🌠专栏:Linux


目录

一、Linux开发工具

🌟vim的基本概念

二、Linux编译器-gcc/g++使用

🌟gcc如何完成(ESc - iso)

1、预处理(进行宏替换)

2、编译(生成汇编)

3、汇编(生成机器可识别代码)

4、连接(生成可执行文件或库文件)

​编辑

 🌠库函数

三、Linux项目自动化构建工具-make/Makefile

🌟是什么?

🌟语法

⭐形成可执行:

⭐清理项目:

⭐make/makefile基本原理:

🌠小贴士:

🌠语法


一、Linux开发工具

🌟vim的基本概念

vim是一个多模式编辑器。

vim常见模式:

• 正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode


• 插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
 

• 末行模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入
:help vim-modes

在命令模式进行的操作:

光标所在行光标快速定位
复制:yy     n+yy文本结尾:shift+g=G行尾:shift+4=$光标位置向后按照字符进行删除:n+x
粘贴:p,n+p文本开始: gg行首:shift+6=^

光标位置向前:

shift+x = X

撤销:u文本任意一行:n,shift+g

以单词为单位,向后跳转: w

大小写快速切换:

shift+~

剪切:dd,n+dd

光标局部定位:

h(左),j(下),k(上),l(右)

以单词为单位,向前跳转: b

替换字符:

n+r

底行模式

底行模式

显示文件行数:

:set nu

保存并退出:

:wq!

查找关键字:

:/关键词

在vim里进行操作:

:!ls -al

多屏打开文件:

:vs filename

多屏光标切换:

:ctrl+ww  左/右键

直接退出:

ctrl + zz 

视图模式:ctrl+v

多行注释:

视图模式允许光标进行批量化选择
1、ctrl+v进入visual BLock
2、h/j /k/l  (光标定位)进行区域选择
3、 shift+i
4、 //
5、按两次 Esc

 取消注释:

ctr+v
h/j /k/l  (光标定位)
d

二、Linux编译器-gcc/g++使用

🌟gcc如何完成(ESc - iso)

写的代码是如何变成可执行文件的?

1、预处理(进行宏替换)

• 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。

• 预处理指令是以#号开头的代码行。

预处理完之后还是C语言,只不过是处理的比较干净的C语言代码。

     gcc -E code.c -o code.i

• -E 开始进行程序的翻译,预处理做完就停下来;

• -o 指目标文件;

•  ".i " 文件为已经过预处理的C原始程序 。

2、编译(生成汇编)

把代码翻译成汇编代码。

• 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。

• 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

  gcc -S code.i -o code.s

• -S 开始进行程序的编译,编译完就停下来;

3、汇编(生成机器可识别代码)

• 汇编阶段是把编译阶段生成的“.s”文件转成目标文件;

• 在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

gcc -c code.c -o code.o

• 开始进行程序的翻译,汇编完成就停下

• 形成 code.o 可重定位目标文件

4、连接(生成可执行文件或库文件)

• 在成功编译之后,就进入了链接阶段。

 gcc -o code code.o

• code.o 目标文件和标准库进行关联,构建可执行程序。

• code 编译出来的文件名,code.o 要编译的文件

🌠小贴士:

连接方式分为动态链接静态链接

 🌠库函数

ldd 可执行程序的名字

表示这个可执行程序,自己在链接时依赖哪些库。

<1> 静态库 

       •  XX.a (linux)、XX.lib (windows)

       • 静态链接:把我们要访问的方法实现,拷贝到我们自己的可执行程序中;

       • 比较浪费资源,可执行程序体积比较大;

       • 不依赖其他库,库丢失也无所谓,程序照样能运行。

<2> 动态库

       • XX.so (linux)、XX.dll (windows)

       • 一旦动态库缺失,所有程序无法运行;

       • 比较节省资源,可执行程序体积小;

       

<3> 要进行动态链接必须要有动态库,要进行静态链接必须要有静态库。

三、Linux项目自动化构建工具-make/Makefile

🌟是什么?

make :是一条命令

makefile:是一个文件

make和makefile组合是一个帮助我们自动化构建项目的一个工具。

🌟语法

⭐形成可执行:

makefile本质是依赖关系和依赖方法的集合。

依赖关系:我和爸爸的关系

依赖方法:我跟爸爸提的要求

        proc : proc.c

目标文件 :依赖关系 列表

⭐清理项目:

 proc:proc.c                                                                                  
      gcc -o proc proc.c
 .PHONY:clean
  clean:
       rm -f proc

⭐make/makefile基本原理:

 🎉 makefile文件,会被make从上到下开始扫描,第一个目标名,是缺省要形成的。如果我们想要执行其他组的依赖关系和依赖方法就 make name

• 依赖方法可以是任意指令;

• @ 关闭命令回显

🎉 makefile在执行gcc命令时,如果发生了语法错误,就会终止推导过程。

🌠小贴士:

<1> .PHONY的作用是什么?

.PHONY:让目标文件,对应的方法,总是被执行的!

<2> 当源文件修改了之后,就可以重新编译:

有时候需要重新编译,又时候不需要,为什么?

对于 源文件可执行程序 ,都是文件,文件 = 内容 + 属性

属性:文件的大小,文件创建的时间

AMC时间:
A:表示这个文件最近被访问的时间
M:最近
内容被修改的时间
C:最近
属性被改变的时间

当修改内容的时候,可能会引发属性的联动(文件的新增,大小就会改变,大小就是文件的属性):

为了效率,Access时间,不是每一次刷新,而是积累一定次数才会刷新。

回到刚才的问题:有时候需要重新编译,有时候不需要,为什么?

根据对比文件各自的 Modify 时间 做到的!

根据源文件和可执行程序谁的时间更加新,来决定的!

可执行程序更加新,不需要重新编译,

源文件更加新,需要重新编译。

以上总结: .PHONY  是让依赖方法,忽略掉时间对比,所以能总是被执行!

🎉 make解释makefile的时候,是会自动推导的。

      一直推到,推导过程,不执行依赖方法。

      直到推到到有依赖文件存在,然后在逆向的执行所有的依赖方法。

🌠语法

<1>

%  为makefile语法中的通配符;

%.c : 当前目录下所有的 .c 文件,展开到依赖列表中;

$< : 依赖关系:右侧的依赖文件,一个一个的交给gcc -c选项,形成同名的 .o 文件

<2>

     $(bin) : $(src)

目标文件:依赖关系列表

makefile中也可以定义变量,没有类型。

$() :把变量的内容替换进来

$^ : 所有的依赖文件列表【$(src)】的所有内容,一次性全部给gcc

$@ : 目标文件,要形成的目标文件

<3> make默认只形成一个可执行程序。

如何一次形成多个可执行程序?

如若对你有帮助,记得点赞、收藏、关注哦!

若有误,望各位,在评论区留言或者私信我 指点迷津!!!谢谢^ ^ ~


http://www.ppmy.cn/embedded/141717.html

相关文章

【CLIP】3: semantic-text2image-search允许局域网访问

前后端都是局域网的在同一局域网内的其他设备上,打开浏览器,访问 http://192.168.50.197:5173/。前端 前端默认是本地的 (semantic-text2image-search) root@k8s-master-pfsrv:/home/zhangbin/perfwork/01_ai/01_semantic-text2image-search/frontend# npm run dev> web@…

【R安装】VSCODE安装及R语言环境配置

目录 VSCODE下载及安装VSCODE上配置R语言环境参考 Visual Studio Code&#xff08;简称“VSCode” &#xff09;是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的&#xff0c;针对于编写现代Web和云应用的跨平台源代码编辑器&…

文件内容扫描工具

简介 文件扫描助手是一款基于Vite Vue 3 Electron技术栈开发的跨平台桌面应用程序。它提供了强大的文件内容搜索功能&#xff0c;支持Word、Excel、PDF、PPT等常见办公文档格式。用户可以通过关键词快速定位到包含特定内容的文件&#xff0c;极大地提高了文件管理和查找效率…

Windows下从命令行(Powershell/CMD)发送内容到系统通知中心

Windows下从命令行&#xff08;Powershell/CMD&#xff09;发送内容到系统通知中心 01 前言 在平时写脚本的时候&#xff0c;将日志等信息直接输出到控制台固然是最直接的&#xff0c;而如果是一些后台执行的任务&#xff0c;不需要时刻关注运行细节但是又想知道一些大致的情…

【Git】:分支管理

目录 理解分支 创建分支 切换分支 合并分支 删除分支 合并冲突 分支管理策略 快进合并 正常合并 bug 分支 总结 理解分支 在版本控制系统中&#xff0c;分支是一条独立的开发线路。它允许开发者从一个主要的代码基线&#xff08;例如master分支&#xff09;分离出来…

Spring Boot开发——整合JPA配置多数据源

文章目录 1. 添加依赖2. 配置数据源3. 创建数据源配置类4. 创建JPA配置类5. 创建第二个数据源的JPA配置类6. 创建实体类和Repository7. 使用多数据源8. 测试结论在现代的企业应用中,经常需要同时连接多个数据库。这可能是因为应用需要访问不同的数据库,或者是为了分离读写操作…

批量生成不同用户的pdf 文件(html样式)

技术 selenium thymeleaf itextpdf chromedriver 使用thymeleaf 将动态数据替换 使用selenium chromedriver 进行js &#xff0c;css等逻辑运算后渲染视图 使用itextpdf 将html 转为pdf 文件 html模板 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf…

【bug】AttributeError: module ‘openai‘ has no attribute ‘error’

【bug】AttributeError: module ‘openai’ has no attribute error’ 环境 openai 1.12.0详情 在处理 openai 请求异常的时候弹出该错误。 import openai# 错误 except openai.error.RateLimitError as e:xxx原因是新版 openai 库改变了API请求异常处理类的导入路径。 解…