Linux——编辑器vim、编译器gcc、调试器gdb、Makefile的编写

一.Vim编辑器

1.简单了解

vim的操作模式:12种(6种基本模式、6种条件模式)

三种最常用的操作模式:普通模式、插入模式、底行模式

       插入模式

     底行模式

模式切换:

普通——>插入     

     i   从光标所在位置开始插入

    a   光标后一个字符处插入

    o    光标下一行行首i女性插入

普通——>底行      :

插入/底行——>普通        esc

1.普通模式:完成基本的基本命令

                    光标移动以及复制粘贴操作。

文件打开默认处于普通模式

2.插入模式:向文件中插入数据

3.底行模式:退出/保存编辑    vim设置

2.操作

1.普通模式下的操作

(1)光标移动:hjkl     左、下、上、右

w/b    向右/向左移动一个单词

G   移动到文章末尾

gg  移动到文档首行

(2)复制/粘贴

复制:

   yy     复制光标所在行的数据

       nyy      复制多行内容

             比如:3yy     复制3行

粘贴:

   p     向光标下行粘贴

   P    向光标上方行粘贴

删除/剪切:

    x   删除光标所在处字符

    dw  删除光标后方的单词

    dd   删除光标所在行

撤销:u   

回退:ctrl+r

2.底行模式操作

q   退出

wq   保存并退出

q!   不保存退出

修改vim配置文件     

在/etc/vimrc目录下     

或者~/.vimrc下(针对每一个用户)

二.gcc编译器

编译过程:

(1)预处理:展开所有代码。

(2)编译:语义语法纠错,若无误则将高级语言代码编译生成汇编代码。

(3)汇编:将生成的汇编代码生成机器指令。

(4)链接:将所有的目标文件以及外部库链接到一起,生成可执行程序。

库文件:

动态库:libc.so     (Linux下gcc默认链接动态库)

静态库:libc.a

静态链接:生成可执行程序时,链接静态库,(将库中的代码直接写入到可执行程序中)

    优点:程序运行时,不依赖静态库的存在

    缺点:浪费资源,造成大量的代码冗余。

动态链接:生成可执行程序时链接动态库(只是写入了库中函数的符号位置信息)。

ldd  文件名        查看可执行程序的依赖项

    优点:充分利用资源。

    缺点:运行时依赖动态库的存在。

      -E  只进行预处理

     -S    只进行编译

     -static  对生成的文件采用静态链接

      -g   生成调试信息(生成debug版本)

三.gdb调试器

gcc默认之生成release版本的程序,但是我们要调试程序时,需要用到的是debug版本的程序

加载程序:gdb ./可执行程序            或者gdb进入后      file  ./可执行程序

调试程序:

         r  接收参数,运行程序         

          start    开始单步调试

         l    默认查看调试行附近代码

               l   file:line   指定文件指定行代码查看

         n   下一步,但是不进入函数

         s    下一步,进入函数体内

         until    file:line     直接运行到指定文件指定行

打断点:b file  line         在file文件第line行打断点

                b  func       给func函数打断点

查看调试信息:i

查看断点信息:i  b     查看断点信息

删除断点:d  (默认删除所有断点)

                     d    b_id    删除指定断点

打印变量内容:p   变量名

继续运行:c    从停止处,继续运行

变量监控:watch  变量名

查看函数调用栈信息:bt

四.Linux项目自动化构建工具make/Makefile

Makefile——普通文件——用来定义项目整体的构建编译规则

make程序是一个解释器,到当前目录下来寻找Makefile文件,对Makefile中记录的项目构建规则,逐行解释执行,完成项目的自动化构建。

Makefile编写规则:

          

依赖对象的作用:可有可无,主要是为了判断项目是否需要重新构建

执行规则:到Makefile中寻找目标对象,为了生成目标对象,执行Makefile中写的命令。

1.到Makefile中寻找目标对象,判断目标对象是否已经存在,

         若已经存在:对目标对象以及依赖对象进行最后一次修改时间比对。若目标对象时间戳大于以来对象时间,则认为项目构建后,源码没有被修改过,不需要重新编译;否则重新编译。

          若不存在:直接执行构建规则,生成目标对象。

2.到Makefile中找寻目标对象,判断依赖对象是否存在,       

           若依赖对象存在:则通过依赖对象最后一次修改时间判断向木是否需要重新构建

           若依赖对象不存在:继续在Makefile中所定义的规则找寻是否有生成依赖对象的构建规则。

预定义变量:

$@: 目标对象

$^:所有依赖对象

$<:依赖对象中的第一个

make在执行命令的时候指定查找到的目标对象。

上述Makefile还可以这样编写

当我们想让每次make的结果都是全部重新编译而不是声明队形已经是最新的时候,我们可以来声明伪对象来进行操作

伪对象:不管目标对象是否存在,不管目标对象是否最新,每次都要重新执行生成规则。

通常伪对象是这样用的:

我们时要执行make来删除test.o文件,这是声明了为对象后的结果

当未声明时:make就会认为这是最新的目标对象,不用再次构建了。(删除失败)

更加方便的使用:

wildcard:获取指定没目录下的文件名

patsubst:字符串替换

发布了58 篇原创文章 · 获赞 43 · 访问量 4426

猜你喜欢

转载自blog.csdn.net/Wz_still_shuai/article/details/89264368