admin 管理员组文章数量: 887021
前言
本篇主要学习了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 生成文件名 + 链接文件
- 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 clean执行清理规则
- 重新编译:make 通过比较源文件和目标文件的时间戳来确定哪些文件需要重新编译
- 运行 make 时,它会检查每个源文件和相应的目标文件的最后修改时间。如果源文件的修改时间比目标文件新,
或者目标文件不存在,make 将执行相应的编译规则 - 如果源文件没有被修改则无需重新编译,这提高了编译的效率,只重新编译那些发生变化的文件
- 运行 make 时,它会检查每个源文件和相应的目标文件的最后修改时间。如果源文件的修改时间比目标文件新,
在编译程序时增加调试信息
- 增加编译选项 –g,通知编译器在生成目标文件时包含调试信息,
以便在调试程序时能够查看源代码、设置断点等。
tips
大家可以试试用VIM编写一下Makefile文件并尝试一下gdb的相关操作
我们下期见^^
版权声明:本文标题:计算机系统基础笔记(2)——VIM&GNU工具链 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1724509884h753138.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论