当前位置: 首页 > news >正文

Linux(4)—— 基础开发工具

目录

yum安装

什么是软件包?

rzsz

查看软件包

卸载

vim编辑器

模式切换

1、命令模式

2、插入模式

3、底行模式

命令模式指令

代码编译

预处理

常用写法

编译过程

-E(预处理)

-S(编译)

-c(汇编)

链接

Linux项目自动化构建工具 —— -make/Makefile

创建项目

清理项目

建立编译


本次文章介绍Linux中的一些基础开发工具;包括yum软件包,vim编辑器,gcc/g++编译器,Linux项目自动化构建工具。

yum安装

yum是一个Linux的软件包管理器,简单来说就类似于我们下载软件时使用的应用商店。

什么是软件包?

在Linux下安装软件,通常会下载到程序的源代码并进行编译,得到一个可执行程序。但是对于用户来说,这样的操作比较麻烦,所以就诞生出了一个更简便的办法 —— 软件包。有人将一些常用的软件提前编译好,做成软件包,直接安装后就可以进行使用。

软件包和软件包管理器,我们可以理解为App和应用商店的关系。yum就是这样一个软件包管理器。

我们可以使用下面的指令来查看yum的存放路径:

which yum

rzsz

这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件. 安装完毕之后可以通过拖拽的方式将文件上传过去。

通过这个软件,我们可以实现window和Linux系统的文件互传。下面我们通过yum安装这个软件。

查看软件包

通过 yum list 命令可以罗列出当前一共有哪些软件包。

yum list

上面的指令表示全部检索,可能会花费很多时间;如果我们想要查找其中某一个包,可以使用grep来进行筛选。例如我们查找上面的rzsz的包:

yum list | grep lrzsz

我们复制包的名称,使用install安装:

yum install lrzsz.x86_64

卸载

下载软件使用下面的命令:

yum remove [软件包名]

vim编辑器

vim编辑器用于文本编写,也可以使用vim来书写代码。vim是一个多模式的编辑器,包括插入模式、命令模式和底行模式。

模式切换

下面我们创建一个c程序文件来学习vim编辑器。

vim test.c

使用该命令来打开一个名为test.c的c程序文件。

1、命令模式

输入上面的指令后就会来到vim的命令模式。命令模式可以理解为vim的默认模式,使用vim打开文件后就会进入命令模式的界面:

我们发现这时按键盘可能没有反应。因为这是用户所有的输入都会被当做命令,一般是不会有文本输入的。

那么我们怎么编写文件呢?这时就需要切换到插入模式。输入键盘上的 i 键即可切换。

2、插入模式

输入i键后我们可以看到左下角变成了INSERT字样,这时就表示切换到了插入模式。

这时我们就可以编写文件了。例如我们写一段简单的c语言代码,打印“Hello Linux!”:

下面我们需要对刚刚写的文件进行保存后退出。这时需要回退至命令模式;按下键盘上的 esc 键即可回退。回退后需要从命令模式进入底行模式:

3、底行模式

按下键盘的 shift + 键后输入 wq 即可退出vim编辑器。

shift+:可以进入底行模式;wq的作用可以理解为保存并退出。

如果想从底行模式又退回命令模式,则按 esc 键即可。

【注意】不能并且不要试图从插入模式直接切换到底行模式

命令模式指令

  • gg:定位光标到最开始行
  • shift + g:定位光标到结尾行
  • n + shift + g:定位光标到任意行;n表示行数
  • yy + (n) + p:复制光标所在行并粘贴到下一行;n表示复制的次数,例如yy100p表示复制当前行100个并从下一行开始粘贴
  • (n)+ yy:复制当前行开始的n行
  • dd +(n)+  p:dd剪切当前行后使用p粘贴到光标位置
  • dd:删除
  • u:撤销
  • shift + $:定位光标到当前行结尾
  • shift + ^:定位光标到当前行开头
  • w,b:光标按照单词进行行内跨行移动
  • h,j,k,l:左、下、上、右移动
  • shift + ~:大小写转化

代码编译

代码书写后需要编译才能执行。这里我们介绍gcc和g++编译器。其中,gcc适合c语言编译,g++适合C++编译。

如果我有一个名为test.c的c程序文件,直接使用gcc尅生成一个编译后的可执行程序。

gcc test.c

执行该命令后会在当前文件夹下默认生成一个 a.out 的可执行程序。最后我们想要运行该程序直接输入命令:

./a.out

就可以运行该程序文件。

g++的使用方法与gcc相同。这里我们需要注意的是,gcc只能编译c语言,如果需要编译C++程序,则g++才能完成编译。

编译流程为:
预处理 ——> 编译 ——> 汇编 ——> 链接

预处理

一般预处理的过程包括:

  1. 去注释(将源文件的注释行代码去掉)
  2. 头文件展开(将头文件的内容拷贝到文件中)
  3. 条件编译
  4. 宏替换(简单替换)

编译器(如gcc)有直接修改代码的能力。我们如果做一些简单的修改,不用使用vim等工具去文件修改内容,可以直接在gcc的命令行加上修改选项即可。

常用写法

使用的比较多的一个gcc编译写法为:

gcc [文件名] -o [命名]

-o表示生成一个自定义命名的可执行程序文件;将我们自己明明的文件名称放在-o选项之后即可。这是后面我们常用的一个编译方式。

编译过程

-E(预处理)

在上面的常用书写方式的基础上,我们需要通过编译流程来完整处理文件。首先我们可以如下加入-E选项进行预处理:

gcc -E [文件名] -o [命名]

我们要求(建议)使用-E选项后给文件命名带 .i 后缀。

选项-E的作用简单来说就是告诉gcc编译器从现在开始进行程序的翻译,将预处理工作做完就停下来,不再往后走。

-S(编译)

预处理之后是汇编,需要用到-S选项:

我们要求(建议)使用-S选项后给文件命名带 .s 后缀。

-S的作用是从现在开始进行程序的翻译,将翻译工作做完后停下来,不再往后走。

-c(汇编)

这一步的作用是将文件翻译成机器能识别的二进制文件。

我们要求(建议)使用-c选项后给文件命名带 .o 后缀。

-c的作用是从现在开始进行程序的翻译,价格汇编工作做完后停下来,不再往后走。

而我们定义的 mycode.o 文件是 可重定位目标二进制文件,简称目标文件。该目标文件虽然是二进制文件,但不能够独立执行。想要执行文件,还需要进行链接操作。

链接

这一步的作用是将可重定位目标二进制文件,和库进行链接形成可执行程序。

如果记不住这些选项流程,可以看一下键盘左上角的esc键,对应-E、-S、-c选项,再加一个链接操作就能完成编译了。

链接有动态链接和静态链接两种形式;在编译器使用静态库进行静态链接的时候,会将自己的方法拷贝到目标程序中,该程序以后不用再依赖静态库;而动态库不能缺失,一旦对应的动态库缺失,影响的不止一个程序,可能导致多个程序都无法进行正常运行。

在Linux中,编译形成可执行程序,默认采用的就是动态链接(提供动态库)

在上面的代码操作中我们使用的就是动态链接的方式。如果我们要在Linux中使用静态链接,则需要使用如下的命令:

静态链接后的文件体积会远远大于动态链的程序。在Linux中如果需要按照静态链接的方式形成可执行程序,则需要添加-static选项。

安装c语言静态库的命令如下:(需要root权限)

yum install -y glibc-static

Linux项目自动化构建工具 —— -make/Makefile

先简单介绍一下:make是一条指令;makefile是一个当前目录下的文件。

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编 译,极大的提高了软件开发的效率。 make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一 种在工程方面的编译方法。 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

创建项目

那么这两个到底是什么东西呢?我们上手来了解一下。使用下面的指令在当前目录下创建一个文件:

touch Makefile

也可以取名为 makefile 小写形式。这里还是建议使用大写。

然后时候用vim打开Makefile文件:

vim Makefile

在后面的操作中我们需要使用到之前写的test.c文件。就是一个简单的打印文件:

#include <stdio.h>int main()
{printf("Hello Linux!\n");return 0;
}

在Makefile文件中书写下面的内容:

test.exe:test.cgcc -o test.exe test.c

其中第二行开头不是空格,而是按 tab 键;第一行表示依赖关系,第二行表示依赖方法。

然后保存并退出。完成操作。

刚刚的操作的作用是,以后要编译该文件就不用再手动写gcc命令,而是直接输入 make 命令,系统就会直接找到刚刚我们指定的文件,然后进行编译操作。

清理项目

除了上面我们创建了一个项目,我们还需要对项目进行清理(删除);我们可以使用前面学到的rm指令,但是该指令使用后无法撤销删除操作,风险太大,因此我们这里介绍另外一种使用makefile来清理项目的方法。

再次使用vim打开makefile文件。使用clean来自定义清理项目的指令:

所以下次要清理项目直接输入指令:

make clean

建立编译

下面我们利用makefile完成编译的步骤。

这里我们发现书写的顺序是反着来的,因为依赖关系是层层递进的,可以理解为根据结果推过程。下面我们make一下:

可以看到执行的顺序又从下往上进行了。

因为makefile在扫描文件时会根据依赖关系依次进行。最开始执行mycode.o的操作时,系统会发现没有mycode.o这个文件,于是会跳转到下一条依赖关系进行;如此类推,层层推进,最后就出现了上图的执行顺序。

我们在使用make指令时,会看到系统回显的依赖方法的执行记录。如果我们不想看到回显的内容,可以在依赖方法前加上@,这样就不会进行回显了。

再次执行make指令,会发现没有回显。

http://www.dtcms.com/a/609418.html

相关文章:

  • 广州好的网站设计公司如何建单位网站
  • 无损改造+智能防控,安科瑞ASCB3为古建筑与历史街区量身打造安全用电解决方案
  • 解决“Move to iOS 卡在准备中”的 9 种有效方法
  • iOS IPA 上传工具全面解析,从 Transporter 到开心上架(Appuploader)命令行的高效上架实践
  • iOS性能调优的系统化实践,从架构分层到多工具协同的全流程优化指南(开发者深度版)
  • GitHub爆火开源项目——RustScan深度拆解
  • iOS和安卓应用上架全指南:从备案到审核发布
  • 海外购物网站排名云商网站建设
  • 解决 Node.js 18+ 构建错误:digital envelope routines::unsupported 完全指南
  • 索尼PSP游戏资源下载 推荐中文汉化ios格式合集分享开源掌机模拟器都支持
  • 【赵渝强老师】OceanBase的连接与路由管理
  • 教育网站建设情况报告长安高端装备网站设计公司
  • Unity游戏打包加密方案解析
  • 考研论文引用格式 AI 校验实操:工具合集 + 技术原理
  • Linux:安装 ActiveMQ 从部署到实践
  • 思政部网站建设总结汕头cms模板建站
  • 云原生与 AI 驱动下的数据工程新图景——解读 DZone 数据工程趋势报告【附报告下载】
  • Linux——解压缩各类文件
  • 基于STM32的多功能旅行箱_329
  • 探索 Java 中的新 HTTP 客户端
  • Swagger技术
  • 100多台物理GPU服务器,每台服务器上有8张GPU卡,组网
  • 英文营销网站 知乎旅游网站建设导航栏
  • 网站服务器管理系统企业网站托管方案
  • vllm缓存使用基础调优实验
  • IGM焊接机器人节气设备
  • 企业网站案例公司德州企业网站建设
  • 从图片到PPT:用Python实现多图片格式(PNG/JPG/SVG)到幻灯片的批量转换
  • 鸿蒙应用构建体系深度解析:ABC、HAP、HAR、HSP与APP的技术全貌
  • Go 项目结构与编码规范