| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> Linux开发工具的使用 -> 正文阅读 |
|
[开发工具]Linux开发工具的使用 |
🌹人生最大的遗憾,就是在遗憾过去的遗憾。
? 目录 🏆四、Linux项目自动化构建工具-make/Makefile 🏆一、Linux软件包管理器-yum👓1.1 什么是软件包-yum的滥觞🌹①什么是软件包
我们知道软件包就是一个可执行程序,我们想要执行这个可执行程序,需要去相应的官网、社区去下载它的源码。而这些源码都被一些企业、厂商放在一些服务器上。所以我们下载安装软件包本质就是去远端服务器去拷贝下载一份源码,再生成可执行程序!!
1.2 yum使用的常见指令
🌹①yum install
使用示例:
🌹②yum list?
这样查看软件包显然不太方便,我们能否通过关键字检举来搜索呢?显然是可以的!
yum list | grep 关键字
?所有包含sl关键字的软件包就都被检举了出来!! 当然,如果你觉得查看不太方便,我们也可以搭配more、less等指令来查看包含sl关键字的软件包也是可以的。(yum list | grep sl | more 或者 yum list | grep sl | less) 除了,yum list可以查看之外,我们还能通过yum search指令来查看软件。
🌹③ yum remove
🌹④yum 的使用示例
?👓1.3yum的深层认识我们好像并没有告诉yum去哪里下载,只是告诉yum我们要下载什么。但是yum会去yum源找下载地址。yum源是什么呢? 🌹①yum源yum源里包含大量的下载地址,我们可以看到自己Linux上的yum源。 ? ? ?如果有的老铁没有安装yum源,那么我们可以配置yum源。 我们安装了Centos-7.repo, 怎么用这个yum源呢?
🌹②非官方软件
我们可以安装一下:yum install -y epel-release 🏆二、Linux编辑器-vim
为什么vim是非常优秀的编辑器,博主这里简单使用一下。在vs下,我们想复制10000行代码,需要自己拷贝复制,很麻烦,但是在vim命令模式下,就很方便。 ?当然,vim强大之处远不止此,所以我们很有必要了解学习vim。 👓2.1vim的模式vim? 文件名 就可以进入vim查看文件 vim有很多模式,在进入vim之后?输入 help vim-modes 就可以查看有多少种模式了! ?但是我们常用的也就三种模式--命令模式、插入模式、底行模式。 🌹①命令模式(Normal mode)
🌹②插入模式(Insert mode)
🌹③底行模式(last line mode)
?插入模式不能直接到底行模式。 👓2.2 vim各种模式的命令集在了解各个模式间如何切换后,我们就要学习如何使用各个模式了。 🌹①命令模式(Normal mode)
Ⅰ移动光标
🖊按[G]:移动到文章的最后。 🖊按[$]:移动到光标所在行的"行尾" 🖊按[^]:移动到光标所在行的"行首" 🖊按[w]:光标跳到下个字的开头 🖊按[e]:光标跳到下个字的字尾 🖊按[b]:光标回到上个字的开头 🖊按[#l]:光标跳到光标后的第#个位置 🖊按[gg]:光标跳到文本开始 🖊按[CTRL]+[b]:屏幕往"后"移动一页 🖊按[CTRL]+[f]:屏幕往"前"移动一页 🖊按[CTRL]+[u]:屏幕往"后"移动半页 🖊按[CTRL]+[d]:屏幕往"前"移动半页 🖊按[#G]跳转光标到第#行。 Ⅱ删除文字 🖊[x]:每按一次,删除光标所在位置的一个字符 🖊[#x]:例如,[5x]表示删除光标所在位置的"后面(包括自己在内)"的5个字符 🖊[X]:大写的X,每按一次,删除光标所在位置的"前面"一个字符 🖊[#X]:例如,[20X]表示删除光标所在位置的"前面"20个字符(不包括自己) 🖊[dd]:删除光标所在行 🖊[#dd]:从光标所在行开始删除#行 Ⅲ复制 🖊[yw]:将光标所在之处到字尾的字符复制到缓冲区 🖊[#yw]:复制#个词到缓冲区 🖊[yy]:复制光标所在行到缓冲区 🖊[#yy]:例如,[6yy]表示拷贝从光标所在的该行"往下数"6行文字 🖊[p]:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制和粘贴的功能 🖊[#p]:将缓冲区内的字符粘贴#次 🖊[#dd]+[p]:剪切粘贴 Ⅳ替换 🖊[r]:替换光标所在处的字符 🖊[R]:替换光标所到之处的字符,直到按下[Esc]键为止 🖊[~]:文本大小写切换 🖊[#r]:将#个字符替换成别的字符 Ⅴ撤销上一次操作 🖊[u]:撤销键,如果您误执行一个命令,可以马上按下[u],回到上一个操作。按多次[u]可以多次撤销 🖊[CTRL]+[r]:撤销的恢复 🖊[cw]:从当前光标位置开始的单词删掉,并且直接进入插入模式 🖊[c#w]:删除#个单词,并且直接进入插入模式 ②插入模式(Insert mode) 🖊[i]:从命令模式切换到插入模式 🖊[o]:换行插入 🖊[a]:光标后移一位插入 🌹③底行模式(last line mode)Ⅰ列出行号 🖊[set nu]:输入[set nu]后,会在文件中的每一行前面列出行号 Ⅱ跳到文件的某一行 🖊[#]:[#]表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,例如输入数字15,再回车,就会跳到文章的第15行。 Ⅲ查找字符 🖊[/关键字]:会高亮出所有的关键字,然后按[n]就会往后寻找到您要的关键字 🖊[?关键字]:光标跳转到包含关键字的那一行,再按[n]就和[/关键字]一样了 Ⅳ保存和离开vim 🖊[wq]:保存并退出 🖊[wq!]:强制保存并退出 🖊[q!]:强制退出,不保存 🖊[w!]:强制写入 Ⅵ分屏操作 🖊[vs] 文件名? 创建一个文件,并分屏显示在vim上。 支持vs 创建多个文件。但是无论你分多少屏,光标只有一个,光标的意义是选中的行(编辑位置)或者屏幕。 🖊[CTRL] [ww] 切换屏幕,实现光标跨屏
Ⅶ底行中的替换模式 🖊[%s/要替换的前者/后者/g]:就可以把全部的要替换的前者替换为后者。 👓2.3vim的配置原理为什么要进行vim配置呢?如果我们不配置,我们的vim就和记事本差不多,这是很不爽的。我们在vs下写代码有语法高亮,有自动缩进,语法错误提示,而vim配置也可以使我们有这些。
🌹①自己配置vim
那怎么配置呢? 我们在.vimrc文件中直接输入指令,就会在之后我们是用vim时,自动执行这个指令。 ?常用的vim配置还有很多: 🖊设置语法高亮:syntax.on 🖊显示行号:set nu 🖊设置缩进的空格数为#:set shiftwidth=# 关于vim的配置还有很多很多,我们可以去网上搜索一下就会出现vim配置大全。 🌹②使用插件
🖊安装TagList插件,下载taglist_xx.zip,解压完成,将解压出来的doc的内容放到~/.vim/doc,将解压出来的plugin下的内容拷贝到~/.vim/plugin 🖊在~/.vimrc中添加: let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window=1 🖊安装文件浏览器和窗口管理器插件:WinManager 🖊下载winmanager.zip,2.X版本以上的 🖊解压winmanager.zip,将解压出来的doc的内容放到~/.vim/doc,将解压出来的plugin下的内容拷贝到~/.vim/plugin 🖊在~/.vimrc中添加let g:winManagerWindowLayout='FileExplorer|TarList? nmap wm :WMToggle<cr> 🖊然后重启vim,打开~/XXX.c或~/XXX.cpp,在normal状态下输入"wm",你将看到上图的效果。
Ⅰgitee上搜索vimforcpp 找到后,下翻找到这样的: ?在Linux中复制粘贴,就可以配置了 ?配置好之后就是这样的: ?有语法高亮,有自动缩进等。 🏆三、Linux编译器-gcc/g++的使用程序的翻译过程包括四个阶段,在C语言预处理(66条消息) C语言预处理_多睡觉才能长头发i的博客-CSDN博客时博主就介绍过编译器是如何处理代码的,这里我们通过gcc编译器的角度再来细说。 👓3.1程序的翻译过程🌹①预处理预处理:头文件展开,去注释,宏替换,条件编译。 ? 示例: ?🖊选项“-E”,该选项的作用是让gcc再预处理结束之后停止编译过程。 ?🖊选项"-o",是指目标文件,"i"文件为预处理完之后形成的临时文件。 🌹②编译(生成汇编)🖊在这个阶段中,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,把代码翻译成汇编语言。 🖊用户可以使用"-S"选项来生成汇编代码,该选项只进行编译而不进行汇编。 ?🌹③汇编这一过程把汇编代码变成二进制目标文件,但是还是不可执行的。 🌹?④链接(生成可执行文件obj文件)链接就是把我们写的代码和标准库中的代码合起来。进行符号表合并,重定位。
👓3.2动态链接和静态链接🌹①静态库和动态库
?当然.so和.a只是Linux的命名规则,在Windows下动态库是.dll。而静态库是.lib 🐱对于动静态链接的区分好像还是不太清晰,什么意思呢?举个例子。比如我想去上网,但是我家里没有电脑,我每次上网都需要跑到网吧去上网,我们需要知道网吧在哪里,怎么去,这样我们想上网和网吧产生了关联。这就类似我们动态链接的过程,我们需要知道库在哪里,和库建立链接,找编译器,链接器。 🐕如果我家里有电脑,我就不需要去网吧,直接就能上网。我们没有和网吧产生关联。类似于我们的静态链接过程,没有和库产生关联,而是将我程序内部要用的方法,从库拷贝了一份,不在需要去库取,完成了静态链接。 🌹②动静态链接的优缺点
👓3.3gcc的动态链接那么我们的gcc编译器使用的是动态还是静态链接呢? 我们这里要使用file指令查看gcc编译的文件是动态还是静态链接。 ?我们可以看到gcc是动态链接的。那么我们动态链接依赖的库是哪一个库呢? ldd指令可以查看我们依赖的是哪一个库。 ?Linux下的指令几乎都是动态链接的: ?Windows下也是动态链接的。 静态链接的方式 如果我们想要静态链接,也是可以的,只不过需要加上-static ?如果有的老铁无法执行生成静态链接的指令,是因为没有下载静态库。 我们需要执行这条指令: ?那么这里可能有的老铁就有疑惑了,为什么动态链接不需要下载动态库?以及静态链接是拷贝库,他拷贝的是.so动态库吗? Ⅰ静态链接占用大量空间 因为静态链接非常消耗内存,所以就被摒弃了,而我们的系统一般都会自动下载动态库而非静态库。 Ⅱ静态链接从静态库拷贝 静态链接拷贝的不是.so(动态库)内部的代码,拷贝的是静态库:/lib64/libc.a 如果没有是无法完成静态链接的。 👓3.4gcc的其他常用选项?🖊-g 生成调试信息。GNU调试器可利用该信息 🖊-shared 此选项尽量使用动态库,所以生成文件比较小,但是需要系统动态库 🖊[-O0]、[-O1]、[-O2]、[-O3]是编译器的优化选项的4个级别,[-O0]表示没有优化,[-O1]为缺省值,[-O3]优化级别最高 🖊-w 不生产任何警告信息 🖊-Wall 生成所有警告信息 🏆四、Linux项目自动化构建工具-make/Makefile👓4.1背景
👓4.2makefile🌹①原理🖊规定要求文件名必须是makefile,m可以大写或不大写 🖊makefile文件里面是依赖关系和依赖方法 ? 这里test作为目标文件,依赖于test.c文件,通过依赖方法创建。 ?makefile存在的意义,是为了构建项目(要做的事情): a、表明依赖关系 b、表明依赖方法 🌹②clean一般在makefile里面写进生成文件后,当执行完程序后我们还需要清理掉文件,在makefile里面clean表示清理。 ?这里clean是不依赖于任何文件的。 至此,我们可以简单写一个makefile来演示一下过程: 我们在执行clean时,需要加上make ,我们不用再敲冗长的gcc命令了!! 这里再补充一点,make只能生成一个目标文件,如果单纯的make,他只执行生成第一个文件,如果你想自己决定执行生成哪个目标文件,需要make后面加上那个方法,例如: ?例如这里,如果我想生成mycode,需要make mycode ?👓4.3 .PHONY一般makefile里面的依赖方法,执行过一次也就是make过一次之后,如果没有做修改就不能再次make了。 ?但是我们发现,make只能一次,而clean好像不受这样的限制:
?我们发现mycode依赖方法被.PHONY修饰过后,也可以多次make。那么.PHONY究竟有什么魔力使得它们可以多次make呢? Ⅰ三个时间 不知道老铁是否还记得文件的三个时间呢? Access time Modify time Change time 那这三个时间有什么用处呢?我们先对文件进行一些操作来看一下会发生什么。 ?修改文件的内容,三个时间都更新。修改文件,修改时间也会随之发生变化,大小变化,属性当然会变化。
🐱如果老铁多次修改,会发现access time好像并不是我们只要访问就更新。这是因为Linux对他的更新方式进行了修改,因为如果访问的非常频繁,更改的也更加频繁,就会出现更多次的访问磁盘,对系统是一个负担。其次还因为这个时间用处不大,很少有人关注最近访问时间,所以就更改成了在一定时间内,根据我们访问的次数,次数够了再修改access time Ⅱ.PHONY的用处 了解了三个时间,那么.PHONY的作用究竟是不要我们根据时间新旧来比较还是禁止了我们修改时间呢??(因为这两种行为都会允许我们多次make) 我们可以验证一下。这里mycode.c已经被.PHONY修饰。 我们可以看到,它的三个时间得到了更新,说明.PHONY的用处就是不让Linux去检查源文件的三个时间和可执行程序的三个时间,从而允许我们多次make。 👓4.4makefile的执行规则🏆五、进度条
在做之前需要阐明一些问题 🌹①缓冲区问题?我们这里为什么第一个是先显现再停顿,而第二个是先停顿再显现呢? 这里就要涉及到C语言时期提及的数据缓冲区的问题。第一个因为遇到了'\n'刷新了缓冲区而把缓冲区的数据先打印了出来,所以第二个我们要刷新缓冲区fflush。 🌹②回车换行
?解决了这两个问题,博主写了一个简单的进度条程序。
?总共也就三个文件,一个Makefile。 效果还是可以的,挺好玩的。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 3:21:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |