首页 > 编程知识 正文

如何搭建linux环境,linux系统

时间:2023-05-05 10:17:41 阅读:156884 作者:4625

在上一个博客之后,我们将组织Linux环境中常用的vim编辑器、gcc工具链、makefile和gdb等工具的使用。

一、vim编辑器

1,工作模式

vim是Linux上常用的文本编辑器。 vim有两种基本的操作模式。

命令模式:输入的字符用作命令,不会进入编辑的文档。

编辑模式:根据输入的文字更改文档的内容。

在“命令”模式下,输入任何编辑命令后,将切换到(插入位置在光标处的编辑模式键入i)。 在编辑模式下,可以返回按Esc命令模式。

命令模式为普通模式,命令行模式和选择模式。

通常模式的输入结束后执行,不需要确定回车。 正常模式下为输入一个冒号则进入命令行模式

命令行模式:输入命令时,在回车确认后执行,执行完成后返回普通模式。

)普通模式下的命令分为光标移动类、画面滚动类、编辑类等。

(a )移动光标类:

(b )滚动画面类:在ctrl F下滚动一个画面ctrl B上滚动一个画面Ctrl U上滚动半画面ctrl D下滚动半画面

(c )编班:

(d )文件类:ZZ存盘退出

在普通模式下键入小写字母v进入选择模式大写字母V进入按行选择模式,然后按3358www.Sina.com/。

)2)命令行模式

:查看帮助首页:转至第01行:转至最后一行:转至第nn行: w保存文件: q退出文件: n新建文件:Ctrl+V组合键进入按列选择模式

wq 保存并退出

GNU/Linux系统中常用的编译工具是GCC。 GCC实质上不是单个程序,而是多个程序的集合,因此通常称为工具链。

二、gcc工具链

(a ) 1、程序编译过程:

在此阶段,将处理源代码中的所有预处理语句。 例如

#include语句中包含的文件内容将替换语句本身

所有预定义的宏都将展开

根据#ifdef #if等语句的条件是否成立来取舍选择相应部分

gcc预处理阶段可以是预处理,通常是以生成.i文件。 例如:

gcc -E -o hello.i hello.c

)2)过选项-E可以使编辑器在预处理结束时停止编译

在此阶段,编译器将对源代码进行语法分析、优化等操作,最终生成汇编代码。 这是整个过程中最重要的部分。

选项编译例如:

gcc -S -o hello.s hello.c

)3)-S使GCC在进行完编译后停止,生成.s的汇编程序

trong>

这一阶段使用汇编器对汇编代码进行处理,生成机器语言代码,保存为后缀为.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语言的所有语法过一遍,这些东西应该已经熟记于心了,再快速过一遍,查缺补漏,顺表敲一些常用的,简单的数据结构实例,为后天做准备。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。