Linux开发工具的使用(vim、gcc/g++ 、make/makefile)

文章目录

  • 一 :vim
    • 1:vim基本概念
    • 2:vim的常用三种模式
    • 3:vim三种模式的相互转换
    • 4:vim命令模式下的命令集
      • - 移动光标
      • -删除文字
      • -剪切/删除
      • -复制
      • -替换
      • -撤销和恢复
      • -跳转至指定行
    • 5:vim底行模式下的命令集
  • 二:gcc/g++
    • 1:gcc/g++的作用
    • 2:gcc/g++的语法
    • 3:预处理
    • 4:编译
    • 5:汇编
    • 6:链接
    • 7:函数库
      • - 动静态库
      • - 动态链接的优缺点
    • 8:静态链接的优缺点
  • 三:make/makefile
    • 依赖关系
    • 依赖方法
    • make工作原理
    • 项目清理

一 :vim

1:vim基本概念

vim是Linux下的一个多模式的编译器 简单来说就是写代码的工具 不提供编译调试等功能
有语法高亮功能 可视化操作不仅可以在终端运行 还可以运行与x windows mac os windows

2:vim的常用三种模式

在这里插入图片描述

1、命令模式
控制光标的移动 字符,字或行 的删除 ,移动复制某区段
以及切换到插入模式和底行模式下
2、插入模式(使用最频繁的模式)
只有在插入模式下 才可以进行文字的输入
以及切换到命令模式
3、底行模式
文件保存或退出 也可以进行 文件替换 找字符串 列出行号等
以及切换到命令模式

3:vim三种模式的相互转换

在这里插入图片描述
命令模式切换到插入模式
输入a:进入插入模式后 从目标光标所在位置的下一个位置开始输入文字
输入i: 进入插入模式后 从光标当前位置开始输入
输入0:进入插入模式后 插入新的一行 从行首开始输入文字
命令模式 切换到底行模式
输入shift+;
插入模式/底行模式切换命令模式
按ESC即可
插入模式和底行模式之间不能相互转换

4:vim命令模式下的命令集

- 移动光标

  • vim可以直接使用键盘来控制光标的上下左右移动,正规的vim使用的是小写字母h j k l 分别控制光标左下上右移动一格 也可以使用方向键进行移动
  • G :移动到文章的最后
  • gg:进入到文本开始
  • $(shift+4):移动到光标所在行的行尾
  • ^(shift+6):移动到光标所在行的行首
  • n+Enter:光标向下移动n行
  • n+l:光标进去到改行的第n个位置
  • ctrl+b :屏幕向前翻一页
  • ctrl+f:屏幕向后翻一页
  • ctrl+u:屏幕向前翻半页
  • ctrl+d:屏幕向后翻半页
  • w:光标进入到下个字的开头
  • e:光标进入到下个字的自尾
  • b:光标回到上个字的开头

-删除文字

  • x:每按一次删除光标所在位置一个字符
  • n+x:删除光标所在位置后面的n个字符
  • X:删除光标所在位置前一个字符
  • n+X:删除光标所在位置后前面的n个字符

-剪切/删除

  • dd:剪切/删除光标所在行
  • n+dd:从光标所在行开始剪切/删除n行
  • p:将剪切的内容复制到光标所在位置下一行
  • n+p:将剪切的内容复制到光标所在位置下一行开始复制n行

-复制

  • yy:复制光标所在行到缓冲区
  • n+yy:复制从光标所在行往下数n行字符到缓冲区
  • p:将缓冲区的字符粘贴到光标所在位置下一行
  • yw:将光标所在位置到字尾的字符复制到缓冲区
  • n+yw:复制n个字到缓冲区

-替换

  • r: 替换光标所在处的字符
  • R:替换光标所在位置的字符 直到按下esc停止uu
  • ctrl+~:快速切换大小写

-撤销和恢复

  • u:撤销
  • ctrl+r:恢复

-跳转至指定行

  • n+G:移动到第n行行首

5:vim底行模式下的命令集

在使用底行模式之前 先按ESC键确定自己处于命令模式 然后再按shift+;进入底行模式

  • 输入 set nu:按回车后在文件中的每一行前列出行号
  • 输入 set nonu:按回车后在文件中的取消列出的行号
  • 输入数字:按回车后就会跳转到该行行首
  • 输入w:保存文件
  • 输入w!:强制保存
  • 输入q:退出文件
  • 输入q!:强制退出文件
  • 输入wq:保存并退出文件
  • 输入vs+文件名:进行多文件操作
  • 输入ctrl+ww:光标在不同文件中切换
  • !+其他指令 :在不退出vim的情况下执行Linux其他命令

二:gcc/g++

1:gcc/g++的作用

gcc/g++分别是GUN中的c和c++编译器
对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
对于 .c和.cpp文件,g++则统一当做cpp文件编译

在使用gcc之前 应该了解一个.c源文件到一个.exe可执行程序经历了哪些过程和函数库 # 程序编译链接的四个过程

  1. 预处理
    完成头文件的展开 删去注释 宏替换等工作
  2. 编译
    将源代码翻译成汇编语言 语法分析 词法分析 语义分析等
  3. 汇编
    汇编代码转换成为二进制指令产生目标文件
  4. 链接
    将汇编过程产生的二进制指令进行连接 生成可执行程序

2:gcc/g++的语法

gcc/g++ 选项 文件
常用选项:
-E :只进行预处理 不会生成文件 需要自己重定向到一个文件里
-S: 编译到汇编语言(生成.s文件) 不进行汇编和链接
-c:编译到目标文件 (生成.o文件) 不进行链接
-o:将执行结果输出到指定文件中
-static:对生成的文件采用静态链接

3:预处理

gcc -E -o test.i test.c
将源文件test.c进行预处理后停止 将是执行结果输出到test.i文件中
在这里插入图片描述
可以看到预处理阶段完成了头文件的展开 删去注释 宏替换等工作

4:编译

gcc -S test.s
将预处理阶段产生的test.i文件编译产生.s汇编文件
在这里插入图片描述
在这里插入图片描述

5:汇编

gcc -c test.s
将汇编文件test.s编译成产生.o目标文件
在这里插入图片描述
在这里插入图片描述

6:链接

gcc test.o
将目标文件链接产生可执行程序a.out
在这里插入图片描述
如果你也和我一样 不喜欢a.out 用-o进行重定向gcc -o test.exe test.o
在这里插入图片描述
可执行程序也是二进制指令
在这里插入图片描述

7:函数库

我们在c程序中,并没有实现printf函数,且在预编译中包含的头文件stiod.h中也仅仅只是有该函数的声明 并没有定以实现该函数 那么printf函数在哪里实现的呢?
在Linux中 系统把这些函数都实现在一个名为libc.so.6(Linux中的一个动态链接库 包含了标准c库的实现)的文件中 在没有特别指定时 gcc会到系统默认的路径’‘/usr/lib’'下进行查找,也就是链接到libc.so.6库函数中去 这样就能实现函数printf了 这也就是链接的作用
库函数一般分为静态库和动态库

- 动静态库

  • 静态库是指在编译链接时 把库文件的代码全部加入到可执行文件中 因此生成的可执行程序文件会比较大 但在运行时也就不需要库文件了在linux下后缀名一般为.a windows中后缀名为.lib
  • 动态库则是在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库 这样可以节省系统的开销 在Linux下后缀为.so windows后缀为.dll 前面所说的libc.so.6就是动态库
  • gcc在编译时默认使用动态链接(使用file命令验证)

file 命令
语法: file 文件名
功能: 辨识文件类型
在这里插入图片描述
gcc/g++在编译时默认采用动态链接 我们也可以加上-static选项使用静态链接的方式编译
gcc -o newtest.exe test.c -static
在这里插入图片描述
采用静态链接 可执行程序会比较大
我们也可以查看一个可执行程序所依赖的库(使用ldd命令)

ldd 命令
语法: ldd 可执行程序
功能: 查看一个可执行程序依赖的库

在这里插入图片描述

- 动态链接的优缺点

在这里插入图片描述

8:静态链接的优缺点

在这里插入图片描述

三:make/makefile

  • make/makefile 是Linux项目自动化构建的工具
  • make是一个命令工具 是一个解释makefile当中的指令的工具
  • makefile是一个文件 带来的好处就是自动化编译 makefile写的好 只需要一个make命令 就能完成整个工程的自动编译 极大提高了开发效率 一个比较大的工程源文件不计其数 按照其类型 功能 模块存放在若干个目录中 mkaefile定义了一系列的规则来指定哪些文件需要先编译 哪些文件需要后编译 甚至于进行更复杂的功能操作
  • make需要和makefile互相搭配使用 完成项目的自动化构建

在使用make/makefile之前 先了解一下各个文件之间的依赖关系和依赖方法

依赖关系

在这里插入图片描述

依赖方法

在这里插入图片描述

make工作原理

  • 当我们输入make命令时 make会在当前目录下寻找名为Makefile或者makefile的文件
  • 找到之后 他会找文件中的第一个“目标文件” 上面makefile例子中 他会找到test这个文件 将这个文件作为最终的"目标文件"
  • 如果test文件不存在 或者是test所依赖的后面test.o 文件的修改时间 要比这个test文件新 那么他就会执行后面所定义的命令来生成test这个文件
  • 如果test所依赖的test.o文件不存在 那么make会在当前文件中找目标位test.o文件的依赖 找到的话 在根据那一个规则生成test.o文件
  • 这就是整个make的依赖性 make会一层一层的去找文件的依赖关系 知道最终编译出第一个目标文件
  • 如果在查找过程中 被依赖的文件找不到 make就会直接退出 并报错 如果是定义的命令错误 或者是编译不成功 make根本不会理-
  • make只管文件的依赖性 如果找到了依赖关系后 冒号后面的文件还是不存在 这样的话make也不会工作

在重新产生一个可执行程序时 都应该将之前生成可执行程序以及生成的文件进行清理 即项目是需要清理的

项目清理

make clean命令是用来清除所有的目标文件 以便重新编译 像清除这种没有被第一个目标文件直接或间接关联 那么他后面所定义的命令将不会被自动执行
在这里插入图片描述
一般这种clean的目标文件 直接将他设置位伪目标 .PHONY修饰,为目标的特性是可以强制执行
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/184900.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字通信和fpga概述——杜勇版本学习笔记

1数字通信处理流程 脉冲调制是每个数字通信系统中间必不可少的环节,通常是使用升余弦滚降滤波器来实现。 超外差接收机原理是利用本地产生的振荡波与输入信号混频,将输入信号频率变换为某个预先确定的频率的方法。超外差原理最早是由E.H.阿姆斯特朗于1…

【理解链表指针赋值】链表中cur->next = cur->next->next->next与cur =cur->next->next的区别

最近在做链表的题目的时候,对于所定义的cur链表指针产生了一些疑惑,查阅资料后整理一下我的理解: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(n…

React中组件之间如何通信?

一、是什么 我们将组件间通信可以拆分为两个词: 组件通信 回顾Vue系列的文章,组件是vue中最强大的功能之一,同样组件化是React的核心思想 相比vue,React的组件更加灵活和多样,按照不同的方式可以分成很多类型的组件…

SQL注入漏洞 其他注入

文章目录 宽字节注入案例 HTTP头部注入Cookie注入base64User-Agent注入Referer 注入 SQL注入读写文件条件1.是否拥有读写权限2.文件路径3.secure_file_priv 读取文件写入文件 SQLMap安装sqlmapkail 源安装仓库克隆 参数简介快速入门;SQLmap(常规&#xf…

Vim编辑器学习

B站学习vim指令链接 1:vim下有两种模式,一种是命令模式,一种是编辑模式 2:命令到编辑模式,按键盘i,编辑到命令格式按Esc 3::wq 保存并退出 :wq code.c保存并把文件命名为…

unity Holoens2开发,使用Vuforia识别实体或图片 触发交互

建议:先看官方文档 我使用的utniy 版本:Unity 2021.3.6f1 官方建议:混合现实工具包简介 - 设置项目并使用手势交互 - Training | Microsoft Learn 配置了正确工具的 Windows 10 或 11 电脑Windows 10 SDK 10.0.18362.0 或更高版本安装了 U…

Redis实战 | 使用Redis 的有序集合(Sorted Set)实现排行榜功能,和Spring Boot集成

专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https:/…

网络通信——与Socket交换数据(三十一)

1. 与Socket交换数据 1.1 知识点 (1)通过Android与Socket完成基本的Echo程序实现; (2)通过对象序列化进行大数据的传输; 1.2 具体内容 对于网络的开发而言,最常使用的交互模式:W…

算法之路(一)

🖊作者 : D. Star. 📘专栏 :算法小能手 😆今日分享 : 如何学习? 在学习的过程中,不仅要知道如何学习,还要知道避免学习的陷阱。1. 睡眠不足;2. 被动学习和重读;3. 强调标记或画线&am…

基于单片机的甲醛检测器设计

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、系统硬件设计三、软件设计4.1 程序结构流程图原理图 四、结论五、 文章目录 概要 本文将要提…

【k8s】pod控制器

一、pod控制器及其功用 Pod是kubernetes的最小管理单元,在kubernetes中,按照Pod的创建方式可以将其分为两类 自主式Pod: kubernetes直接创建出来的Pod,这种Pod删除后就没有了,也不会重建 控制器创建的Pod&#xff1a…

2023.11.7 Spring 依赖注入的三大方式

目录 前言 属性注入&#xff08;Autowired&#xff09; Setter 注入 构造方法注入 Resource Autowired 和 Resource 的区别 Autowired 和 Resource 查找 Bean 对象的区别 前言 配置文件 ​ <?xml version"1.0" encoding"UTF-8"?> <beans …

uniapp在不需要后端数据的情况下 怎么记录用户进一次记录一次

目录 前言&#xff1a; html部分 js部分 完整代码 前言&#xff1a; 一时兴起&#xff0c;不喜勿喷&#xff0c;今天听到了这个问题想到了一个方法&#xff0c;解决方式如下。 html部分 他用于显示访问次数&#xff08;visitCount变量的值&#xff09;。 <template&…

MySQL主从搭建,实现读写分离(基于docker)

一 主从配置原理 mysql主从配置的流程大体如图&#xff1a; 1&#xff09;master会将变动记录到二进制日志里面&#xff1b; 2&#xff09;master有一个I/O线程将二进制日志发送到slave; 3) slave有一个I/O线程把master发送的二进制写入到relay日志里面&#xff1b; 4&#xf…

万字长文 - Python 日志记录器logging 百科全书 之 基础配置

万字长文 - Python 日志记录器logging 百科全书 之 基础配置 前言 在日常的开发中工作中&#xff0c;日志记录扮演着不可或缺的角色。它不仅能让我们了解应用程序的运行状况&#xff0c;还能帮助我们定位并解决各种问题。 最基本的&#xff0c;它记录了应用程序的运行情况&am…

SBCFormer:快速、轻量级神经网络 for 边缘AI

一&#xff1a; SBCFormer [ PDF] SBCFormer 是一种 CNN-ViT 轻量混合网络backbone&#xff0c;能在单板计算机上能以每秒 1 帧速度进行全尺寸 ImageNet 分类的轻量级网络。 通过在低端 CPU 上实现高准确性和快速计算&#xff0c;为树莓派 4 型号 B 的 ARM-Cortex A72 CPU 提供…

情感分析与LLMs角色扮演

深度学习自然语言处理 原创作者&#xff1a;wkk 就像人类在做一件事情的时候&#xff0c;可能需要尝试多次。LLM也是如此&#xff01;这对于情感分析任务尤其如此&#xff0c;在情感分析任务中&#xff0c;LLM需要深入推理来处理输入中的复杂语言现象&#xff08;例如&#xff…

「Qt Widget中文示例指南」如何模拟一个时钟?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 点击获取Qt Widget组…

康耐视深度学习ViDi-ViDi四大工具之一蓝色定位工具/Locate

目录 工具介绍使用步骤说明调整工具ROI添加特征标签生成定位姿态训练并审核模型编辑器参数说明蓝色定位工具/Locate工具 工具介绍 蓝色定位工具用于识别和定位图像中的特定特征或特征组。该工具的输出可用于为其他ViDi 工具提供位置数据。使用该工具时,您提供图像训练集,然后…

Apache Doris (五十二): Doris Join类型 - Broadcast Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Broadcast Join原理