计算机系统基础笔记(2)——VIM&GNU工具链

前言

本篇主要学习了VIM文本编辑器的简介及使用操作,以及介绍了GNU工具链,学会如何利用GNU工具链简单编写代码以及(自动化)编译、运行代码

第一部分 VI/VIM 简介

  • VI是基于字符界面的文本编辑器*,VIM是VI的增强版,可以在非图形环境下使用, Linux中最常用的编辑器之一
  • 启动vim:(创建或打开一个新的文件,记得一定要给文件起名字!!!不然保存不了TAT)
    $ vi a.c(a.c就是文件的名字)

第二部分 VIM的工作模式

在这里统一说明:除普通模式外所有模式都是按ESC键退出!!!

VIM工作模式的切换如图所示:
在这里插入图片描述

1. 普通模式

  • 用于导航、删除、复制等操作,默认模式
  • 操作
    • 移动光标 **上下左右键 **
    • 移动至行首home,行尾end
    • 翻页:pageup上一页,** pagedown**下一页
    • 文件开始gg,文件结尾shift+g
    • 复制当前行yy,剪切当前行 dd
    • 粘贴剪切板内容p
    • 撤销上一步u,恢复上一步撤销 Ctrl+r

2.插入模式

即编辑模式,用于输入,按“i”进入

  • 屏幕底部会显示INSERT
  • 光标移动:支持PageUp/PageDown 方向键以及home end进行光标移动

3.查找模式

在普通模式下,按?键进入

  • 屏幕底部显示 / (正向查找模式) 或 ?(反向查找模式)
  • 正向查找区域:就是我们通常所说的域名解析
  • 反向查找区域:IP反向解析,它得到作用是通过查找IP地址的PTR记录来得到该IP地址指向的域名。
  • 在提示符 / 或 ?后输入需要查找的字符串,并按回车键进行查找
  • 按 n 键查找下一项,按Shift + n 查找上一项

4.命令模式

在普通模式下,按 : 键进入命令模式

  • 屏幕底部显示 : ,输入命令并回车即可执行命令
  • w 保存当前文件,q退出,wq保存并退出
  • w !强制保存,wq !强制保存并退出 (用于只读文件); q! 退出不保存
    (q!是挺好用的,尤其在你忘记命名文件或者无权限编辑文件时^^不过慎用@_@)
  • 数字:跳转至指定行

5.可视模式下的操作

在普通模式下,按 v 键进入可视模式

  • 屏幕底部显示 --VISUAL-
  • 移动光标可进行文本块的选择
  • y键复制文本块,d键剪切文本块
    (这块跟普通模式有点像,可以对比着来)
    在这里插入图片描述

第三部分 GNU工具链

1.GNU工具链:开源编程工具

GNU包含了许多用于编译、调试和构架软件的实用程序

2. GCC

一个功能强大的编译器集合,支持多种编程语言

构建由单个源文件组成的程序

  • 1.gcc +文件.c
    • 默认生成文件名为a.out
    • 运行:./+生成文件
      在这里插入图片描述
  • 2.指定生成文件名
    • gcc -o 生成文件名 + 链接文件
      在这里插入图片描述

构建由多个源文件组成的程序

  • 1.gcc -o 生成文件 源文件1 源文件2 …
    在这里插入图片描述
  • 2.先编译后链接
    • gcc -c 源文件1 源文件2
    • gcc -o 生成文件 编译文件1(.o) 编译文件2
      在这里插入图片描述

增量编译

当某个cpp更新后,只编译这个cpp文件,称为增量编译。

  • 只编译源文件2,然后链接
    在这里插入图片描述

引用自定义头文件

  • gcc -c 源文件 -I+目录
    (下面这个例子是inc/目录)
    在这里插入图片描述

链接第三方库

  • -l :用于指定链接库的名称,m为数学库的名称(math)
  • 库文件命名格式:libxxx.a (静态库)或 libxxx.so(动态库),xxx即为库的名称
  • -L:如果库不在默认搜索路径,则需要使用-L指定路径,类似于-I(L的功能更强一点^^)
    在这里插入图片描述

3. GNU Binutils

包括汇编器 连接器 目标文件转换工具

4.GDB

调试程序的强大工具 可以支持多种汇编语言

使用GDB调试程序

  • 进入gdb控制台(只用输入前两行^^)
    在这里插入图片描述
  • 设置断点(控制程序语句的执行)

    设置断点(gdb) b 文件 :行数

  • 运行到断点处

    (gdb)r

  • 打印断点处的变量值

    (gdb) p 变量名

  • 执行一行语句

    (gdb)s

  • 执行到下一个断点处(无断点则到程序结束)

    (gdb)continue

在这里插入图片描述

5. Make

构建和管理项目的工具,基于makefile文件的自动化编译工具

基本步骤

  • 在工程 根目录下创建一个Makefile文件
  • 编写Makefile文件
  • 在Makefile文件所在目录下,运行make命令,进行编译

使用Makefile实现自动化编译(简单版)

  • 1.编译
    在这里插入图片描述
  • 2.简单的自动化,(用vi)编写一个shell脚本(图右下角是文件名)
    在这里插入图片描述
  • 3.增加执行权限,运行脚本
    在这里插入图片描述

编写Makefile 文件

(下面是Makefile文件的内容,黄色的部分为自定义部分)请添加图片描述

  • 变量:CC、CFLAGS、LDFLAGS、SRCS、OBJS、TARGET

    • 赋值即声明
    • 使用的格式:$(变量名)
  • $(SRCS:.c=.o) 表示 将 $(SRCS) 变量中所有的.c替换为.o

    • 等价于 OBJS = a.o b.o
  • 链接规则:将所有的OBJS链接生成TARGET

    • 链接规则必须在编译规则执行完,所有的.o文件准备好后才能执行
  • 清理规则:删除所有的OBJS和TARGET文件

    • 清理规则没有依赖条件,在任何情况下都可以执行

~如图
在这里插入图片描述

make工具的运行

  • 构建目标:在执行 make 命令时,make 工具会按照 Makefile 中规则的依赖关系和指定顺序
    执行规则。默认情况下,make 将尝试构建第一个目标。然后,它会递归地处理该
    目标的依赖关系,并按照依赖关系的规则进行构建。
    • 也可以在参数中指定make所构建的目标,例如,使用 make clean执行清理规则
      在这里插入图片描述
  • 重新编译:make 通过比较源文件和目标文件的时间戳来确定哪些文件需要重新编译
    • 运行 make 时,它会检查每个源文件和相应的目标文件的最后修改时间。如果源文件的修改时间比目标文件新,
      或者目标文件不存在,make 将执行相应的编译规则
    • 如果源文件没有被修改则无需重新编译,这提高了编译的效率,只重新编译那些发生变化的文件

在编译程序时增加调试信息

  • 增加编译选项 –g,通知编译器在生成目标文件时包含调试信息,
    以便在调试程序时能够查看源代码、设置断点等。
    在这里插入图片描述

tips

大家可以试试用VIM编写一下Makefile文件并尝试一下gdb的相关操作
我们下期见^^

  • 46
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值