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修饰,为目标的特性是可以强制执行
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Sql】sql server数据库提示:执行Transact-SQL语句或批处理时发生了异常。 无法打开数据库msdb,错误:926。

【问题描述】 打开sql server2008r2数据库的时候, 系统提示执行Transact-SQL语句或批处理时发生了异常。 无法打开数据库msdb,错误:926。 【概念理解】 首先MSDB数据库是的作用: 用于给SQL Server代理提供必要的信息来运行调度警…

2 快速上手使用Paimon数据湖

2.1 基于Flink SQL操作Paimon 在这里我们基于Flink 1.15(ON YARN)、Paimon 0.5版本开发一个案例。 注意:想要使用Paimon是非常简单的,不需要复杂的安装部署,只需要使用一个jar包即可对它进行操作。 我们在使用Paimon的时候其实也可以把它简单…

云闪付支付接口的技术实现方式

(一)整体框架。      云闪付的整体架构如图 1 所示,总体与原有的支付清算体系相同,只是增加了云端支付平台、移动应用平台和移动应用。云端支付平台主要对移动应用端的限制密钥进行更新和管理,同时对云端支付账户进…

2011年408计网

第33题 TCP/IP 参考模型的网络层提供的是()A. 无连接不可靠的数据报服务B. 无连接可靠的数据报服务C. 有连接不可靠的虚电路服务D. 有连接可靠的虚电路服务 本题考查TCP/IP 参考模型的网络层 若网络层提供的是虚电路服务,则必须建立网络层的…

WPF中依赖属性及附加属性的概念及用法

完全来源于十月的寒流,感谢大佬讲解 依赖属性 由依赖属性提供的属性功能 与字段支持的属性不同,依赖属性扩展了属性的功能。 通常,添加的功能表示或支持以下功能之一: 资源数据绑定样式动画元数据重写属性值继承WPF 设计器集成 …

佳能相机拍出来的dat文件怎么修复为正常视频

3-3 佳能相机是普通人用得最多的相机之一,也有一些专业机会用于比较重要的场景,比如婚庆、会议录像、家庭录像使用等。 但作为电子产品,经常会出现一些奇怪的故障,最严重的应该就是拍出来的东西打不开了。 本文案例是佳能相机拍…

校园安防监控系统升级改造方案:如何实现设备利旧上云与AI视频识别感知?

一、背景与需求分析 随着现代安防监控科技的兴起和在各行各业的广泛应用,监控摄像头成为众所周知的产品,也为人类的工作生活提供了很大的便利。由于科技的发达,监控摄像头的升级换代也日益频繁。每年都有不计其数的摄像头被拆掉闲置&#xf…

51单片机-串口通信

文章目录 前言1.基础介绍2.串口实战3.4. 前言 1.基础介绍 常见1,2,3,电源 常用方式1 fosc外部晶振 2.串口实战 3. 4.

软件测试/测试开发丨探索Python的魔力:从第一个程序到快捷键大揭秘

点此获取更多相关资料 第一个 Python 程序 通过程序输出 Hello World 是在学习每一门编程语言时,都会接触到的第一个程序。 在 Python 中,可以通过内置函数 print() 实现向控制台输出 Hello World 。 使用 print()输出 可以进入 命令行交互模式 或使…

从研发域到量产域的自动驾驶工具链探索与实践

导读 本文整理自 2023 年 9 月 5 日百度云智大会 - 智能汽车分论坛,百度智能云自动驾驶云研发高级经理徐鹏的主题演讲《从研发域到量产域的自动驾驶工具链探索与实践》。 全文中部段落附有演讲中 2 个产品演示视频的完整版,精彩不容错过。 (视频观看&…

生态环境领域基于R语言piecewiseSEM结构方程模型

结构方程模型(Sructural Equation Modeling,SEM)可分析系统内变量间的相互关系,并通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性,是近年来生态、进化、环境、地学、…

【网络】五中IO模型介绍 + 多路转接中select和poll服务器的简单编写

高级IO 前言正式开始前面的IO函数简单过一遍什么叫做低效的IO钓鱼的例子同步IO和异步IO五种IO模型阻塞IO非阻塞IO信号驱动多路转接异步IO 小结 代码演示非阻塞IO多路转接select介绍简易select服务器timeout 为 nullptrtimeout 为 {0, 0}timeout 为 {5, 0}调用accept select编写…

macos端串口调试推荐 serial直装激活 for mac

serial for mac版软件特色 1.准备好macOS High Sierra 最近的升级是否会让您的设备落后?Serial将使其恢复正常工作,同时保持Mac的安全功能完好无损。 2.完美无瑕的仿真 Serial是一个全功能的终端仿真器,支持Xterm,VT102和ANSI…

pyspark连接mysql数据库报错

使用pyspark连接mysql数据库代码如下 spark_conf SparkConf().setAppName("MyApp").setMaster("local")spark SparkSession.builder.config(confspark_conf).getOrCreate()url "jdbc:mysql://localhost:3306/test?useUnicodetrue&characterE…

Mactracker for mac(硬件信息查询工具)免费下载

想知道你电脑的信息吗?Mactracker Mac版是Macos上一款硬件信息查询工具,可以查询电脑中的硬件信息,还可以查看您使用软件的具体情况,苹果电脑产品和周边产品的信息,售价等等,让您对电脑有更多深刻的了解。 …

NowCoder | 环形链表的约瑟夫问题

NowCoder | 环形链表的约瑟夫问题 OJ链接 思路&#xff1a; 创建带环链表带环链表的删除节点 代码如下&#xff1a; #include<stdlib.h>typedef struct ListNode ListNode; ListNode* ListBuyNode(int x) {ListNode* node (ListNode*)malloc(sizeof(ListNode));node…

Zabbix如何监控腾讯云NAT网关

1、NAT网关介绍 NAT 网关&#xff08;NAT Gateway&#xff09;是一种支持 IP 地址转换服务&#xff0c;提供网络地址转换能力&#xff0c;主要包括SNAT&#xff08;Source Network Address Translation&#xff0c;源网络地址转换&#xff09;和DNAT&#xff08;Destination N…

在Python中使用deepfakes实现AI换脸功能

目录 一、Deepfakes技术原理 二、Deepfakes技术实现方法 三、Deepfakes技术应用与实现代码 四、结论 近年来&#xff0c;深度学习技术在图像处理、计算机视觉和人工智能领域取得了显著的进步。其中&#xff0c;Deepfakes技术是一种基于深度学习的图像合成技术&#xff0c;可…

AI时代产品经理升级之道:ChatGPT让产品经理插上翅膀

文章目录 一、ChatGPT简介二、ChatGPT在产品经理工作中的应用1. 快速获取用户反馈2. 智能分析竞品3. 智能推荐产品4.分析市场趋势5.优化产品功能 三、总结与展望《AI时代产品经理升级之道&#xff1a;ChatGPT让产品经理插上翅膀》亮点内容简介目录作者简介获取方式 随着人工智能…

使用oracle虚拟机添加新硬盘

1、关闭运行的虚拟机后配置 单击选择要配置的oracle虚拟机&#xff0c;单击设置–>存储—>控制器&#xff0c;单击添加虚拟硬盘图标。 2、配置硬盘 单击“创建”&#xff0c;单击“下一步”&#xff0c;选择需要创建的虚拟硬盘大小&#xff0c;完成创建。 完成创建后…