linux操作系统华软软件学院电子系P1教学内容►Vim编辑器►Gcc编译器与gdb调试器►Makefile的编写linux操作系统华软软件学院电子系P2教学要求►掌握vim编辑器的常用命令,能够熟练使用vim编辑器编写C语言程序►掌握gcc编译器及gdb调试器的使用,能够编写简单的makefile文件►重点:vim的常用命令、makefile的编写linux操作系统华软软件学院电子系P33第二节Vim编辑器linux操作系统华软软件学院电子系P4VIM编辑器►vi简介Linux系统的第一个全屏幕编辑器不是一个排版程序,只是一个文本编辑程序没有菜单、只有相当丰富的命令Vi有三种工作模式:命令行模式、文本输入模式、末行模式Linux下有很多编辑器,最典型的是gedit和vimgedit是界面操作,跟Windows上的编辑器差不多vi则是命令交互的编辑器linux操作系统华软软件学院电子系P5VIM编辑器任何时候,只要按一下ESC键,即可进入vi命令行模式在shell环境下输入启动vi命令,进入编辑器时,也是该模式注意:此时输入的字符都被当做编辑命令来解释并且输入的命令并不在屏幕上显示出来命令行模式linux操作系统华软软件学院电子系P6VIM编辑器命令行模式下输入如下命令可以进入文本输入模式插入命令i、I附加命令a、A打开命令o、O修改命令c(cw、cc、c$)取代命令r、R此时用户输入的任何字符都被vi当做文本内容保存起来文本输入模式linux操作系统华软软件学院电子系P7VIM编辑器在命令行模式下,用户按“:”键可进入末行模式此时vi会在现实窗口的最后一行显示一个“:”作为提示符,等待输入命令大部分管理命令就是在这里输入的末行命令执行完后,vi自动回到命令模式末行模式三种模式切换方法如图:命令行模式文本输入模式末行模式ESCi、a、o、rESC:linux操作系统华软软件学院电子系P8VIM编辑器►vi编辑器启动使用vi进行编辑第一步是进入编辑界面,一般方法为:$vifilename请尝试创建新文件并编辑一段简单的C程序linux操作系统华软软件学院电子系P9VIM编辑器►显示vi中的行号当编辑的文件较大时,人工确认行号不方便需通过vi的命令确认行号,在末行模式中输入:setnu同样,如果想取消显示行号,则在末行模式中输入:setnumber或:setnonu:setnonumber或linux操作系统华软软件学院电子系P10VIM编辑器►光标移动操作在vi操作中,不建议使用上下左右四个箭头移动光标,而是:h左移j下移k上移l右移这几个字符跟数字键组合,可以移动多个位置,比如3j光标下移3行5h光标左移3格H移至屏幕上端L移至屏幕下端M移至屏幕中央gg到第一行G到最后一行nG到第n行:n到第n行linux操作系统华软软件学院电子系P11VIM编辑器移动光标还有如下几个常用命令^或数字0:光标移动到行首$:光标移动到行尾w:光标跳转到下一个字首,按标点或单词分割W:光标跳转到下一个字首,长跳,比如end-of-line是一个字e:光标跳转到下一个字尾E:光标跳转到下一个字尾,长跳b:光标跳转到上一个字,按标点或单词分割B:光标跳转到上一个字,长跳linux操作系统华软软件学院电子系P12VIM编辑器►屏幕命令屏幕命令是以屏幕为单位去移动光标,常用于文件的滚屏和分页Ctrl+U:将屏幕向前(文件头方向)翻滚半屏Ctrl+D:将屏幕向后(文件尾方向)翻滚半屏Ctrl+F:将屏幕向后(文件尾方向)翻滚一屏Ctrl+B:将屏幕向前(文件头方向)翻滚一屏linux操作系统华软软件学院电子系P13VIM编辑器►文本插入命令i:插入文本从光标所在位置前开始I:将光标移动到当前行的行首,然后在其前插入文本►文本附加命令a:在光标当前位置之后追加新文本A:将光标移动到所在行的行尾,从那里开始插入新文本►文本修改命令o:在光标的下面新开一行,并定位到该行的行首,等待输入O:在光标的上面插入一行,并定位到该行的行首,等待输入linux操作系统华软软件学院电子系P14VIM编辑器►文本修改命令——删除删除单个字符x:删除光标处的字符nx:删除光标所在位置开始向右的n个字符(n是具体的数字)X:删除光标前面的那个字符nX:删除光标前面向左的n个字符(n是具体的数字)linux操作系统华软软件学院电子系P15VIM编辑器删除多个字符dd:删除光标所在当前行D或d$:删除从光标所在处开始到行尾的内容d^:删除从光标前一个字符开始到行首的内容dw:删除一个单词dG:删除光标所在行到末尾所有内容:n1,n2d删除n1到n2行linux操作系统华软软件学院电子系P16VIM编辑器复制和剪切命令yy、Y复制当前行nyy、nY复制当前行以下n行dd剪切当前行ndd剪切当前行以下n行p、P粘贴在光标所在行下或行上替换和重复命令r取代光标所在处字符R从光标所在处开始替换字符,直到按ESC结束.重复上一次命令操作linux操作系统华软软件学院电子系P17VIM编辑器搜索和替换/string搜索指定字符串string:setic搜索时忽略大小写;:setnoic区分大小写n下一个搜索到的位置;N上一个搜索到的位置:%s/old/new/g全文替换,将old替换为new,g不需确认:n1,n2s/old/new/c指定行替换,c需要确认linux操作系统华软软件学院电子系P18VIM编辑器►文本修改命令——取消取消上一个命令,也称复原命令可以取消前一次的误操作或不合适的操作对文件的影响u:取消刚才的操作,可取消多次,直到最初状态U:取消刚才的操作,只取消前一步操作►文本修改命令——恢复恢复刚刚取消的命令可以把刚通过u命令取消的操作,重新输入Ctrl+r:恢复刚才取消的内容linux操作系统华软软件学院电子系P19VIM编辑器►退出vi编辑完文件后,准备退出vi返回shell时,可以在末行模式下,使用如下方法::wnewfile保存文件为newfile,但并不退出:q退出vi。如果未保存,vi将提示不能退出:wqnewfile保存并退出:q!强制退出,不保存:x如果修改过,则保存退出;如果未修改过,则直接退出ZZ快捷键,保存修改并退出linux操作系统华软软件学院电子系P20VIM编辑器►设置vi可以通过~/.vimrc文件对vi进行默认的设置也可在末行模式中设置setnu:显示行号syntaxon:语法高亮(编程时适用)setundolevels=200:undo最大次数setignorecase:忽略大小写setautoindent:自动缩进(编程时适用)settabstop=4:设置tab键的宽度linux操作系统华软软件学院电子系P21VIM编辑器►多窗口、多文件命令模式下输入:efile可以再打开一个文件,并且此时vim里会显示出file文件的内容。同时显示多个文件::sp//水平切分窗口:vsplit//垂直切分窗口文件间切换Ctrl+6//两文件间的切换窗口间切换的方法Ctrl+w+方向键——切换到前/下/上/后一个窗格Ctrl+w+h/j/k/l——同上Ctrl+ww——依次向后切换到下一个窗格中linux操作系统华软软件学院电子系P22GCC编译器►介绍gccgcc是gnu推出的功能强大、性能优越的多平台编译器可以在多种平台上编译出可执行程序的编译器集合gcc的编译流程分为4个步骤,如下hello.chello.ihello.shello.ohello预编译gcc-E编译gcc-S汇编gcc-c链接gcclinux操作系统华软软件学院电子系P23GCC编译器该阶段,编译器会将代码中的stdio.h编译出来用户可以使用gcc的选项“-E”进行查看预编译步骤$gcc-Ehello.c-ohello.i留意生成的hello.i文件预编译的过程,其实是把stdio.h的内容插入hello.i文件中linux操作系统华软软件学院电子系P24GCC编译器该阶段,编译器会将C代码转化为汇编代码使用gcc的-S选项进行查看编译步骤$gcc-Shello.i-ohello.s留意生成的hello.s文件linux操作系统华软软件学院电子系P25GCC编译器该阶段,编译器会将汇编代码转化成目标文件使用gcc的-c选项进行汇编步骤$gcc-chello.s-ohello.o链接步骤$gcchello.o-ohello该阶段,编译器会将目标文件和函数库进行链接最终生成可执行的二进制文件执行步骤$chmod755hello$./hellolinux操作系统华软软件学院电子系P26GCC编译器►gcc基本用法和常用选项gcc命令的基本用法如下:$gcc[options][filename]前面介绍的4个步骤,我们可以一次全部执行,如下:$gcchello.c-ohello当没有指定-o选项时,默认生成的可执行文件为a.out$gcchello.c$./a.outlinux操作系统华软软件学院电子系P27GCC编译器gcc命令的的常用参数如下:-c:只激活预处理、编译、汇编,只编译成obj文件,不链接-S:只激活预处理、编译,把文件编译成汇编代码-E:只激活预处理,不生成文件,不编译-o:指定目标名称,当不指定时则默认为a.out-ifile:包含某个代码,功能相当于在代码中使用#include-Idir:首先在指定目录查找#include指定的文件-llibrary:指定编译时使用的库-Ldir:指定编译时搜索库的路径-O0、-O1、-O2、-O3:编译器的优化选项的4个级:0没有优化、1是默认、3是最高-g:指定编译器在编译时产生调试信息(参考gdb一节)-Wall:显示附加的警告消息linux操作系统华软软件学院电子系P2828第二节gdb调试器linux操作系统华软软件学院电子系P29GDB调试器►gdb简介gdb能在程序运行时,观察程序的内部结构和内存堆栈情况gdb主要功能如下:监视程序中变量的值设置程序断点逐行执行代码linux操作系统华软软件学院电子系P30GDB调试器gdb调试时常用的命令如下:命令说明file装入想要调试的可执行文件kill终止正在调试的程序list列出产生执行文件的源码的一部分next执行一行源代码但不进入函数内部step执行一行源代码并且进入函数内部run执行当前被调试的程序quit终止gdbwatch监视一个变量的值而不管它何时被改变break在代码中设置断点,使程序执行到这里时被挂起make不退出gdb情况下,可以重新产生可执行文件shell不离开gdb,执行UNIXshell命令linux操作系统华软软件学院电子系P3131第三节Makefilelinux操作系统华软软件学院电子系P32Makefile►Makefile文件利用make工具,可以将大型项目分解成多个更容易管理的模块方便管理人员梳理各个源文件之间复杂的关系一个make命令,可以编译不同目录下的多个源文件make工具最主要最基本的功能是通过makefile文件来描述源程序之间的相互关系,并自动维护编译工作如果一个目录下没有Makefile文件,输入make命令,系统报错linux操作系统华软软件学院电子系P33MakefileLinux系统中,习惯使用Makefile文件名编译是输入make命令即可$make–fMakefile.debug如果要使用其他文件(一般不建议),则需要通过-f选项指定$makelinux操作系统华软软件学院电子系P34Makefile假设一个工程中包含filea.c、fileb.c、test.c三个文件如果用gcc编译这个工程,需要$make现在我们使用Makefile对这个工程进行管理,则建立Makefile文件$gcc-cfilea.c–ofilea.