欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Linux:基础开发工具

Linux:基础开发工具

2024/12/27 3:48:20 来源:https://blog.csdn.net/m0_68142120/article/details/143997777  浏览:    关键词:Linux:基础开发工具

1. 软件包管理器

(1) 什么是软件包

在Linux下安装软件,主要有以下方法

1. 下载到程序的源代码,并进行编译得到可执行程序。

2. 软件包安装-- 获取rpm安装包,用rpm指令安装

3. 包管理器 yum(centos)      apt/apt-get(ubuntu) 进行安装。(解决包的依赖问题)

软件包和软件管理器,类似于手机上的app和应用商店的关系。

yum 是Linux下常用的一种包管理器,主要应用在Fedora,RedHat,Centos等发行版上。

而在Ubuntu上主要使用apt作为其包管理器。apt同样可以自动解决依赖关系、下载和安装软件包的功能。

(2) yum与apt的安装与删除

以下代码分别是yum与apt下载指定软件包的指令(package_name)是要下载的软件包执行后按y确认安装即可安装成功(安装和删除都需要root用户进行)

yum install package_nameapt-get install package_name

通过以下指令可以更新所有软件包

yum updateapt update

以下指令是yum与apt的删除软件包操作

yum remove package_nameapt purge package_name

以下指令是列出所有的可用的软件包

yum一般会列出:软件包的名称、软件包的版本号

apt默认情况下只列出软件包名称和版本

yum list availableapt list available
 (3) 注意事项

关于yum与/apt的所有操作都必须保证主机(虚拟机)网络通畅。

可以通过ping指令来验证,结果如下所示

2. 编辑器 vim

(1). vim的概念

vim是vi的升级版本不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮便于阅读,不仅可以在终端运行也可以运行于windows,Macos等不同的操作系统,通用性强。

我们可以使用vim 文件名 来使用vim编辑器,如果文件名不存在,系统会自动创建。

vim常见的三种模式(有很多模式,目前掌握着三种)。分别是命令模式、插入模式、底行模式,各模式的功能区分如下:

正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符,字或行的删除,移动复制某区段及进入Insert mode下,或者到last line mode

插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按[ESC]键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

末行(底行)模式(last line mode)

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。

 进入vim默认是命令模式

输入i或a或者o可以切换为插入模式,i a o的区别为

i:在当前光标处进入插入模式。

a:在当前光标的后一位置进入插入模式。

o:在当前光标处新起一行进入插入模式

 我们按Esc键即可退出插入模式,再按下shift+;   即:即可进入底行模式。

若输入w(保存当前文件)  wq(存盘并退出vim)   q!(不存盘强制退出vim)就能保存退出

在命令模式下要查看你的所有模式:打开vim,底行模式直接输入

help vim - modes  即可

(2). vim的快捷键

命令模式

h光标左移
l光标右移
j光标下移
k光标上移
G移动到文章的最后
$移动到光标所在行的行尾
^移动到光标所在行的行⾸
w光标跳到下个字的开头
e光标跳到下个字的字尾
b光标回到上个字的开头
#l光标移到该行的第#个位置,如:5l,56l
gg进入到文本开始
shift+g进⼊文本末端
ctrl+b屏幕往 后 移动一页
ctrl+f屏幕往 前 移动一页
ctrl+u屏幕往 后 移动半页
ctrl+d屏幕往 前 移动半页
x每按⼀次,删除光标所在位置的⼀个字符
#x6x 表示删除光标所在位置的后⾯(包含自己在内)6个字符
X⼤写的X,每按⼀次,删除光标所在位置的“前⾯”⼀个字符
#X20X 表示删除光标所在位置的 前20个字符
dd删除光标所在行
#dd从光标所在行开始删除#行
yw将光标所在之处到字尾的字符复制到缓冲区中
#yw复制#个字到缓冲区
yy复制光标所在行到缓冲区
#yy6yy 表示拷贝从光标所在的该行往下数”6行⽂字
p将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须 与“p”配合才能完成复制与粘贴功能
r替换光标所在处的字符
R替换光标所到之处的字符,直到按下「ESC」键为⽌
u回到上⼀个操作。按多次“u”可以执⾏ 多次回复
ctrl+r撤销的恢复(撤销撤销操作)
cw更改光标所在处的字到字尾处
c#wc3w 表示更改3个字
ctrl+g列出光标所在行的行号。
#G15G  表示移动光标到第15行首。

底行模式

set nu会在⽂件中的每⼀行前面列出行号
set nonu取消显示行号
##表示⼀个数字,再按回车键就会跳到该行
/关键字先按/,再输入想寻找的字符,若第一次找的关键字不是想要的按n往后寻找
?关键字先按?再输入想寻找的字符,若第一次找的关键字不是想要的按n往后寻找
w保存文件
q  q!强制离开vim
wq退出并保存

vim还可以进行各种配置,可以通过各种教程配置

3. 编译器 gcc/g++

gcc一般编译C语言,g++一般编译C++

 要经过:预处理—>编译—>汇编—>链接四个阶段,可以参考这篇了解程序的编译与链接-CSDN博客

使用格式

gcc 选项 要编译的文件  选项  目标文件

 以下是常用选项

•-E 只激活预处理,这个不生成文件,你需要把它重定向到⼀个输出文件里面

• -S  编译到汇编语⾔不进行汇编和链接

• -c  编译到目标代码

• -o  文件输出到⽂件,该选项后需紧跟输出文件名.。不指定就为a.out文件

• -static  此选项对⽣成的⽂件采用静态链接

• -g  生成调试信息。GNU调试器可利用该信息。

• -shared  此选项将尽量使⽤动态库,所以⽣成文件比较小。

• -O0/O1/O2/O3  编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

• -w  不生成任何警告信息。

• -Wall  生成所有警告信息。

 

利用gcc/g++编译完成后,使用 ./生成的可执行文件 即可执行文件。

4. 自动化构建 make/Makefile

(1). make与Makefile的概念

一个工程中的源文件很多,Makefile定义了一系列规则来指定,哪些文件需要先编译,哪些文件需要重新编译,以及其它更复杂的功能操作。

其好处就是自动化编译,写好之后,只需要一个make命令,整个工程完全自动编译,提高开发效率。

make是一个命令工具,用来解释Makefile中指令的命令工具,一般来说,大多数IDE都有这个命令,比如:Delphi的make,Visual C++的n make,Linux下GNU的make。可见,makefile很常见。

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建

(2). 基本使用
test:test.cppg++ -o test test.cpp
.PHONY:clean
clean:rm -f test

 

 我们上面的文件test,它依赖test.cpp

    g++ -o test test.cpp  就是与之对应的依赖方法(开头必须用TAB开头,不可用四个空格)

依赖文件列表可以是空的

 clean这种,没有被第一个目标直接或间接关联,那么它后面所定义的命令不会被自动执行,但是可以显式执行。即上面的 make clean。来清除所有的目标文件。以便重编译。

我们加上.PHONY修饰就将其设置成了伪目标,伪目标的特性是,总能被执行

比如

执行完make后是不能再执行make的,但是我们改变一下Makefile中的内容

.PHONY:test                                                                                            
test:test.cppg++ -o test test.cpp
.PHONY:clean
clean:rm -f test

 就可以了

我们推导一下

test:test.og++ test.o -o test
test.o:test.sg++ -c test.s -o test.o
test.s:test.i                                                                                                  g++ -S test.i -o test.s
test.i:test.cppg++ -E test.cpp -o test.i
.PHONY:clean
clean:rm -f *.i *.s *.o test                               

上面递归实现了编译全过程,当然实际没有必要这样写。

(3). make的工作

在默认方式下,即只输入make命令

1. make会在当前目录下找名字叫"Makefile"或"makefile"的文件。

2. 如果找到,它会找文件中的第一个目标文件(target),在上面会找到test,并作为最终的目标文件

3. 如果test文件不存在,或者test所依赖的后面的test.o文件的文件修改时间要比test这个文件新(可以用touch进行测试),那么他就会执行后面所定义的命令来生成test这个文件

4. 如果test所依赖的test.o文件不存在,那么make会在当前文件中找目标为test.o文件的依赖性,如果找到则再根据那一个规则生成test文件。(有点类似于一个堆栈的过程)

5. 当然,.c文件和.h文件是存在的,于是make会生成test.o文件,再用test.o文件声明make的终极任务,即执行文件。

6. 这就是整个make的依赖性,make会一层一层的去找文件的依赖关系,知道最后编译出第一个目标文件。

7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错。而对于所定义的命令的错误或编译不成功,make不管。

makefile(M可以大写也可以小写)文件也可以简写为:

1. $@ :表示依赖关系中的目标文件(冒号左侧)。

2. $^ :表示依赖关系中的依赖文件列表(冒号右侧全部)。

3. $< :表示依赖关系中的第一个依赖文件(冒号右侧第一个)。

5. git

为了方便管理与保存代码我们就需要使用git。git实际上就是一个代码托管平台。

git的使用步骤

1. 下面分别是Ubuntu与Centos的下载指令
sudo apt install gitsudo yum install git
 2. 在gitee上创建一个仓库

 3. 将仓库克隆到本地

 在linux中执行以下指令

git clone 链接

我们要将刚创建的仓库克隆到本地,将上面链接处设置上对应的链接就可以了。

4. 设置全局git邮箱和用户
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

上面双引号填自己邮箱,下面填自己的名字即可。

5. 将要上传的代码拷贝到此路径

6. 通过指令上传代码

先通过以下代码将文件添加到暂存区

git add 文件名

在使用以下指令将暂存区文件提交到本地仓库

git commit -m "提交的内容信息"

最终通过以下指令,再输入gitee用户名与密码后将本地推送到远程仓库

git push
7. 查看日志与删除远端仓库文件

(1). 查看日志输入以下指令即可

git log

(2). 删除远端仓库文件

例如删除test文件

依次输入以下指令

git rm testgit commit -m "测试删除"git push

 实现如下所示

 上面还通过 git status  来看了当前文件状态与之前提交的区别,上图绿色字体即为区别

6. 调试器——gdb

程序的发布方式有两种,debug模式和release模式,Linux gcc/g++出来的二进制程序默认是release模式的。我们必须在源代码生成二进制程序时加上-g选项,如果没有添加,程序无法被编译。

gcc test.c -o test
//默认模式不支持调试gcc test.c -o test -g
//debug模式支持调试

 可以通过 gdb 调试文件 调试目标文件。

gdb binFile

命令作用使用
gdb binFile打开

list/l

显示源代码,从上次位置开始,每次列出10行list/l  10
list/l  函数名列出指定函数的源代码list/l  main
list/l  文件名:行号列出指定的源代码list/l  test.c:1
r/run从程序开始连续执行run
n/next单步执行,不进入函数内部next
s/step单步执行,进入函数内部step
break/b  文件名:行号在指定行号设置断点

break 10

break test.c:10

break/b  函数名在函数开头设置断点break  main
info break/b查看当前所有断点的信息info break
finish执行到当前·函数返回然后停止finish
printf/p打印表达式的值print  start+end
p  变量打印指定变量的值p  x
set  var  变量=值修改变量的值set var i=10
continue/c从当前位置开始连续执行程序continue

delete/d

breakpoints

删除所有断点delete  breakpoints

delete/d

breakpoints  n

删除序号为n的断点delete  breakpoints  l
disble breakpoints禁用所有断点disble breakpoints
enable breakpoints启用所有的断点enable breakpoints
info/i  breakpoints查看当前设置的断点列表info  breakpoints
display  变量名跟踪显示指定变量的值(每次停止时)display  x
undisplay  编号取消对指定编号的变量的跟踪显示undisplay  1
until  X行号执行到指定行号until 20
backtrace/bt查看当前执行栈的各级函数调用及参数backtrace
info/i locals查看当前栈帧的局部变量值info locals

quit或ctrl+d

退出GDB调试器
watch监视一个表达式(如变量)的值,这个值在程序运行期间的值发生变化,会暂停程序执行并通知使用者watch  r
set var  变量=值更改一个变量看是否是因为这个变量报错set var f=1

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com