接着上一篇博客,把Linux环境下常用的vim编辑器,gcc工具链,makefile和gdb等工具的使用理一理。
一、vim编辑器
1,工作模式
vim是Linux常用文本编辑器。vim有两种基本工作模式:
命令模式:输入的字符作为命令使用,不进入被编辑的文档中。
编辑模式:输入的字符将修改文档的内容。
在命令模式下,如果输入某些编辑命令(一般切换到插入位置在光标处的编辑模式键入i),则切换到编辑模式;编辑模式下,按Esc可以切换回命令模式。
命令模式分为三种:普通模式,命令行模式和选择模式。
普通模式输入完毕就执行,不需要回车确定。普通模式下输入一个冒号则进入命令行模式。
命令行模式:输入命令需按回车确认才执行,执行完毕后返回普通模式。
(1)普通模式下命令分为移动光标类,滚动屏幕类、编辑类等。
(a)移动光标类:
(b)滚动屏幕类:ctrl + F 向下滚动一屏 ctrl + B 向上滚动一屏 Ctrl + U 向上滚动半屏 ctrl + D 向下滚动半屏
(c)编辑类:
(d)文件类:ZZ存盘退出
在普通模式下输入小写字母v进入选择模式,输入大写字母V进入按行选择模式,按Ctrl+V组合键进入按列选择模式。
(2)命令行模式
:help 查看帮助首页 :0 移动到第一行 :¥移动到最后一行 :n 移动到第n行 :w保存文件 :q退出文件 :n 新建文件 :wq 保存并退出
二、gcc工具链
GNU/Linux系统上常用的编译工具是GCC。GCC实质上不是一个单独的程序,而是多个程序的集合,因此通常称为工具链。
1、程序编译过程:
(a)预处理微信设置水滴昵称,个性中带点萌
在这一阶段,源码中所有的预处理语句得到处理,例如
#include语句所包含的文件内容替换掉语句本身
所有已定义的宏被展开
根据#ifdef #if等语句的条件是否成立取舍相应部分
gcc预处理阶段可以生成.i文件,通过选项-E可以使编辑器在预处理结束时停止编译。例如:
gcc -E -o hello.i hello.c
(2)编译
在这一阶段,编译器对源码进行语法分析,优化等操作,最后生成汇编代码。这是整个过程中最重要的一部。
可以通过选项-S使GCC在进行完编译后停止,生成.s的汇编程序。例如:
gcc -S -o hello.s hello.c
(3)汇编
这一阶段使用汇编器对汇编代码进行处理,生成机器语言代码,保存为后缀为.o的目标文件中。
当程序由多个代码文件构成时,每个文件都要进行汇编工作,生成.o目标文件后,才能进行下一步链接工作。
目标文件已经是最终程序的某一部分了,只是在链接之前还不能执行。可以通过-c选项生成目标文件:
gcc -c -o hello.o hello.c
(4)链接
经过汇编后的机器码不能直接运行,为使操作系统能正确加载可执行文件,文件中必须包含固定格式的信息头。还必须与系统提供的启动代码链接起来才能正常运行,这些工作都由链接器来完成。
gcc -o hello hello.c
2、gcc的基本用法
gcc [-Wall] [-O1..3] [-o name] file
-Wall:打开所有警告项
-O 设置优化级别, O0表示关闭优化功能
-g 将调试信息编译到目标文件中
-o name:指定输出文件的名字是name
file:被编译(链接)的文件。
使用举例:
三、make和makefile
一个软件中通常包含很多文件,每次都进行编译会很麻烦而且效率低下。
在Windows平台上的VC、VB都有工程概念,一旦建立一个工程,这些开发平台会自动地维护其中的各种文件,从而高效编译。
在Linux中,使用make完成这一功能。
1、makefile文件说明
使用make工具,首先要编写makefile文件,一个makefile文件包含5个方面:
1、具体规则 2、隐含规则 3、定义变量 4、指令 5、注释
2,makefile的规则:
诸如Autoconf和Automake的工具可以自动生成makefile文件。makefile的内容核心是一系列的规则。规则的基本格式是:
target:dependency
(tab字符)command
(1)target(目标):通常是要产生的文件的名称
(2)dependency(依赖):指用来输入从而产生目标的文件。
(3)command(命令):是make执行的动作,一个规则可以有多条命令,每个命令一行。命令行首字符是TAB
3、makefile的实例:
(1)实例一:
objects = main.o mouse.o command.o display.o
CC = gcc
CFLAGS = -Wall -O2 -g //相当于C中定义变量
game : $(objects) //定义game生成规则
$(CC) -o edit $(objects)
main.o : defs.h //定义main.o生成规则,包含隐含规则
mouse.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
.PHONY : clean
clean : //定义clean的规则,无依赖
$(RM) edit $(objects)
game的生成规则包含了规则的三个基本要素:目标、依赖、命令;main.o等规则没有命令,属于隐含规则(implicit rule)。clean规则没有依赖,不属于编译的内容,只是完成一个指定的动作。
隐含规则能够告诉make使用传统的标准方法完成任务。例如,生成一个目标文件的方法是使用C编译器编译C语言源程序,这个步骤所用到的命令基本都是相同的。使用隐含规则就无须详细指定这些命令,而make能按照文件名的后缀的变化,决定所采用的规则。
(2)实例二:
变量是makefile中定义的名字,用来代替一个文本中的字符串 ,该文本字符串称为该变量的值。Makefile中常见预定义变量有:
(a)CC 默认值cc(gcc)是C编译器的名称。
(b)CPP 默认是$(CC) -E 是C与预编译器的名称。
(c)CXX默认值是g++,是C++编译器的名称、
(d)RM 默认值 rm -f 是删除程序的名称。
(f)$@ 用在生成规则中,表示当前目标。
(g)$< 用在生成规则中,表示当前目标的第一个依赖目标。
(h)$^ 用在生成规则中,表示当前目标的所有依赖目标。
使用变量的方式:$(变量名)变量名只是字符时,()可省略
常用的变量赋值操作:
:= 直接赋值,信值覆盖原来的值。
?= 条件赋值,如果原来无值则赋值。否则保持原来的值。
+= 加法赋值,新值附加在原来值后面。
= 递归赋值,如果右侧包含其他变量,当这些变量的值变化时,被赋值变量的值也变化。
4,make的用法:
make 工具的基本用法如下:
make [-C dir] [-f file] [target]
-C dir:执行时进入dir目录,默认当前目录
-f file:使用file作为makefile
target:要完成的目标,目标在makefile中定义,默认是定义的第一个目标。
四、gdb调试工具
GDB是GNU的调试工具,它可以跟踪被调试的程序,进行设置断点、单步执行等操作。当程序暂停执行时,可以使用命令查看程序中的变量值、CPU的寄存器值、内存的值以及函数调用栈等信息。
被调试的应用程序在编译时最好使用-g参数将调试信息编入目标文件中:
gcc -g app.c -o app
用以下命令启动对程序app的调试:
gdb app
如果程序app运行时需要参数,则用以下命令:
gdb --args app arg1 arg2 // arg1和arg2被视为app的参数,而不是gdb的参数
启动后进入GDB交互界面,可以输入GDB的命令进行调试,常用命令如下(回车是重复上一条命令):
Shell进阶那一块看着有点复杂,不太容易搞定,需要再抽个时间仔细过一过了,今天就到这儿了,算是完成了今天的目标吧。总结一下今天:白天有点贪玩,浪费了一部分时间,以后尽量把娱乐时间安排在晚上9点以后。另一个方面是需要规划一下运动时间,今天只是在晚饭后在外面溜达了几圈,运动量太少了,需要加强!明天一天把C语言的所有语法过一遍,这些东西应该已经熟记于心了,再快速过一遍,查缺补漏,顺表敲一些常用的,简单的数据结构实例,为后天做准备。 ———————————————— 版权声明:本文为CSDN博主「iotflh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/iotflh/article/details/86499259
以上就是良许教程网为各位朋友分享的Linux相关知识。