怀念夏天 发表于 2024-10-26 07:59:01

★ Linux ★ 基础开发工具的利用(上)

Ciallo~(∠・ω< )⌒☆ ~ 今天,我将和大家一起学习 linux 基础开发工具的利用~
https://i-blog.csdnimg.cn/direct/52fc8aaee38e4b30b3305fc1ab3a99e5.jpeg
目录
壹  Linux编辑器 - vim利用
1.1 vim的基本概念
1.2 vim正常模式命令集
1.2.1 插入模式
1.2.2 移动光标命令
1.2.3 编辑命令
1.3 vim末行模式命令集
贰  Linux编译器 - gcc/g++利用
2.1 gcc怎样完成
2.2 几个小问题
2.2.1 条件编译
2.2.2 为什么要编译成汇编文件
2.2.3 动静态库是什么
2.2.4 解决sodu报错
叁  Linux项目主动化构建工具-make/Makefile
3.1 初识makefile
3.2 .PHONY
3.3 完整的依靠关系
3.4 makefile中的写法
3.4.1 第一个版本
3.4.2 第二个版本
3.4.3 最终版本
~ 完 ~

壹  Linux编辑器 - vim利用

1.1 vim的基本概念

vim主要有三种模式,分别是命令模式、插入模式和底行模式。


[*]命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,大概到 last line mode。
[*]插入模式:只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们背面用的最频仍的编辑模式。
[*]底行模式:文件生存或退出,也可以进行文件更换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要检察你的所有模式:打开vim,底行模式直接输入。
模式的切换:
https://i-blog.csdnimg.cn/direct/20b636621cf343909ac119ba9b25b5f3.jpeg

1.2 vim正常模式命令集

★  命令前加数字能更快的进行批量操作 ~
1.2.1 插入模式



[*]按「i」 进入插入模式「insert mode」从光标当前位置开始输入文件;
[*]按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
[*]按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
1.2.2 移动光标命令



[*]按「h」、「j」、「k」、 「l」:控制光标左、下、上、右移一格 ~
[*]按[gg]:进入到文本开始 ~
[*]按[shift+g]:进入文本末端 ~
[*]按「$」:移动到光标所在行的行尾 ~
[*]按「^」:移动到光标所在行的行首 ~
[*]按「w」:光标跳到下个单词的开头 ~
[*]按「e」:光标跳到下个单词的字尾 ~
[*]按「b」:光标回到上个单词的开头 ~
1.2.3 编辑命令

复制与黏贴与剪切


[*]「yy」:复制光标所在行 ~
[*]「p」:将缓冲区内的字符贴到光标所在位置 ~
[*]「dd」:剪切并删除光标所在行 ~
[*]「x」:剪切并删除光标所在位置背面的一个字符 ~
[*]「X」:剪切并删除光标所在位置前面的一个字符 ~
撤销


[*]「u」:撤销历史操作 ~
[*]「ctrl + r」: 撤销u的操作 ~
一旦退出文件编辑,无法再进行撤销了~ 没有退出都可以撤销 ~
更换


[*]「r」:更换光标所在处的字符 ~
[*]「R」:【更换模式】更换光标所到之处的字符,直到按下「ESC」键为止 ~
[*]「shift + ~」:小写改大写 ~
查找


[*]「#」:选中单词 ~
[*]「n」:批量查找 ~
批量注释


[*]ctrl+v 进入【V-BLOCK模式】 ~
[*](n+) h j k l G 选择要注释行 ~
https://i-blog.csdnimg.cn/direct/c5a1e7f61a1747828df40095145f2add.png


[*]shift+i 进入【插入模式】,输入第一行的 // ~
https://i-blog.csdnimg.cn/direct/b3d7035bbd58460f95d4ff43174c460d.png


[*]esc退出【插入模式】 ~
https://i-blog.csdnimg.cn/direct/be3a3cdedb9449c6815f76166361b268.png


[*]完成 ~
1.3 vim末行模式命令集



[*]「w」: 文件生存 ~
[*]「q」:退出vim ~
[*]「q!」:强制退出vim ~
[*]「wq」:退出并生存文件 ~
[*]「set nu」:列出行号 ~
[*]「!command」:实行命令 ~
[*]「%s/dst/src/」:批量更换 ~
[*]「vs 文件」:分屏 ~
[*]「ctrl+ww」:切换分屏 ~

贰  Linux编译器 - gcc/g++利用

2.1 gcc怎样完成

gcc [选项] 要编译的文件 [选项] [目标文件] 1. 预处置惩罚(进行宏更换)


[*]预处置惩罚功能主要包括宏界说,文件包含,条件编译,去注释等 ~
[*]预处置惩罚指令是以#号开头的代码行 ~
[*]选项“-E”:开始历程步伐翻译,预处置惩罚完后就停下来 ~
[*]选项“-o”是指目的文件,“.i”文件为已颠末预处置惩罚的C原始步伐 ~
[*] gcc –E hello.c –o hello.i
2. 编译(天生汇编)


[*]在这个阶段中,gcc 起首要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言 ~
[*]选项“-S”:开始翻译,编译完后就停下来 ~
[*] gcc –S hello.i –o hello.s
3. 汇编(天生呆板可识别代码)


[*]汇编阶段是把编译阶段天生的“.s”文件转成目的文件 ~
[*]读者在此可利用选项“-c”就可看到汇编代码已转化为“.o”的二进制目的代码了 ~
[*] gcc –c hello.s –o hello.o
4. 链接(天生可实行文件或库文件)


[*]在乐成编译之后,就进入了链接阶段 ~
[*] gcc hello.o –o hello
2.2 几个小问题

2.2.1 条件编译

https://i-blog.csdnimg.cn/direct/64f95589148d49f08b6918c4a1443f60.png
命令行级别的宏界说:
gcc test.c -o test -DM
gcc test.c -o test -DM=100 预处置惩罚的本质就是修改编辑我们的文本代码~
-DM就是再文本文件中参加#define M 100如许的字符串~
条件编译的作用:


[*]软件进行专业度,收费情况进行区分,利用条件编译,可以进行代码动态裁剪~
[*]内核源代码也是采用条件编译进行代码裁剪~
[*]开发工具,应用软件不同平台下的利用~

2.2.2 为什么要编译成汇编文件

步伐的发展是从二进制->汇编语言->c语言->C++/JAVA等。每个阶段都颠末了几十年的发展,c语言出现时汇编语言已经很成熟了,把c语言翻译成汇编语言再转换成二进制要比直接翻译成二进制轻易得多~
每个语言的发明都要有对应的编译器使他可以翻译成汇编语言,那汇编语言怎么编译成二进制呢?起首在汇编语言出现后,先要发明一个二进制版的编译器,然后用汇编语言写一个汇编编译器,用二进制版的汇编编译器编译一下汇编写的汇编编译器,最后二进制版的就可以不要了,直接用汇编版的进行编译,这就是编译器的自举过程~

2.2.3 动静态库是什么



[*]动态库:Linux (.so)   windows (.dll)
[*]静态库:Linux (.a)     windows (.lib)
库是一套方法大概数据集,为开发提供最基本的保证(基本接口,功能,加速我们的二次开发)~
Linux下的C语言库为 libc.so 和 libc.a ,库的名字为去掉前缀lib和后缀.so/.a后剩余的。
动态库:把动态库内部实现的方法和我们自己的步伐链接起来,让我们自己的步伐能在库中找到方法,形成可实行步伐,动态库在实行库中的方法时必要跳转到库中实行,完了再返回。
根据地址的更换来定位~
动态链接的图示:
https://i-blog.csdnimg.cn/direct/250b29f66b11444bbe725fcd5474e1fc.png
https://i-blog.csdnimg.cn/direct/3feb156ccfd8409eb6cdbb3ab0a8df1e.jpeg
静态链接就是把库里的实现拷贝一份到我们自己的代码中,用时调用自己这份实现。静态库只有在链接时有用,一旦形成可实行步伐,就不必要静态库了~
动静态库对比:


[*]动态库形成的可实行步伐体积肯定很小~
[*]可实行步伐堆静态库的依靠度小,动态库不能缺失~
[*]步伐运行必要加载到内存,静态链接的会在内存中出现大量的重复代码~
[*]动态链接比较节流内存和磁盘资源~
ldd命令 - 显示所用库~  c步伐默认动态链接
https://i-blog.csdnimg.cn/direct/f7161f595c93483f8da743a39b7bb541.png
file命令 - 具体检察范例
https://i-blog.csdnimg.cn/direct/8d7e83ab5b054e34afc998d96e3b9bfc.png
https://i-blog.csdnimg.cn/direct/ccb4234c1fe4415dbec9a64a7b8bc351.png
假如想要静态链接:
https://i-blog.csdnimg.cn/direct/2d965eb145e54dd9b577a8917fc5c154.png
https://i-blog.csdnimg.cn/direct/5fd161a2faf94f65991f1042c78bb8ff.png
静态链接的可实行文件会大很多~
C++的情况:
https://i-blog.csdnimg.cn/direct/d0f54b2986e94a0dad869b59aca84d80.png
动态库(共享库)的本质就是把语言层面的公共代码在内存中只出现一份~

2.2.4 解决sodu报错

https://i-blog.csdnimg.cn/direct/fc0b089f32e54c44acd13ca4a54c0b95.png
普通用户在sudo时可能会出现以上报错~
解决步调:


[*]su -
[*]输入root密码
[*]vim /etc/sudoers
[*]找到位置参加:https://i-blog.csdnimg.cn/direct/98854433575f48518a55f13a0d080b68.png
[*]:wq! 强制退出
[*]ctrl+d 退出root
然后就完成辣~
https://i-blog.csdnimg.cn/direct/f7c7ac5a7f8048aca8c5f3e314149d20.png
叁  Linux项目主动化构建工具-make/Makefile

3.1 初识makefile

make是一条命令,makefile是一个文件,两个搭配利用,完成项目主动化构建。
makefile带来的好处就是——“主动化编译”,一旦写好,只必要一个make命令,整个工程完全主动编译,极大的提高了软件开发的效率。


[*]touch Makefile
[*]vim Makefile
https://i-blog.csdnimg.cn/direct/0f8ec211c677482ca7850b60693e43e7.png
第一行为依靠关系 ~
第二行为tab + 依靠方法 ~
https://i-blog.csdnimg.cn/direct/42983d7d69bd44b9a04542005f3c078d.png
上图为利用makefile的方法 ~
https://i-blog.csdnimg.cn/direct/84b151ed4a914e0ebca5b27b9ccb5883.png
make命令扫描makefile文件的时候,从上向下扫描,默认形成第一个目的文件  ~

3.2 .PHONY

https://i-blog.csdnimg.cn/direct/9c8afb1c510c490287f8f14e3e0250c7.png
https://i-blog.csdnimg.cn/direct/93658ee3fca841aebb10ebbdb70448a5.png
.PHONY修饰的每次编译都实行~(本质上是说忽略判断新旧问题)
而一般来说gcc编译的不发起加.PHONY修饰,假如源文件不改动,编译就不会实行~
https://i-blog.csdnimg.cn/direct/58edec2219ba4994a7f7696276bc5fcd.png
Modify时间是作为知道bin和.c新旧的尺度 ~
https://i-blog.csdnimg.cn/direct/4a45a82935814e4a9400f380c8015f68.png
3.3 完整的依靠关系

https://i-blog.csdnimg.cn/direct/d8f05deb193a4ed39b56c00f05d01d83.png
https://i-blog.csdnimg.cn/direct/644f913b49d84e33972c6e3d11f7534c.png

3.4 makefile中的写法

测试方法:
https://i-blog.csdnimg.cn/direct/f45a44d1a4c94f82b1c83568ef8b49a1.png
@符号让make不回显~
3.4.1 第一个版本

基于变量版的Makefile ~(雷同于宏)
https://i-blog.csdnimg.cn/direct/dc39e688f7d044ce968c4043e171f77e.png
BIN和SRC也可以优化掉~
https://i-blog.csdnimg.cn/direct/fb74a902163942b19c8a5f20122b9ff3.png
https://i-blog.csdnimg.cn/direct/69869a2dc7e64ecbb06e5f88f4778cb7.png
3.4.2 第二个版本

https://i-blog.csdnimg.cn/direct/05afc1142b0f4b34b0b2772db6769f9d.png

假如有多个文件呢~
https://i-blog.csdnimg.cn/direct/e58f79222fd542baa1d06b7919aa6820.png
https://i-blog.csdnimg.cn/direct/8e36654e4e054389a75f25c4f97a8c8f.png
3.4.3 最终版本

https://i-blog.csdnimg.cn/direct/a4b45792e5bc4384ad4442f25cd938f2.png
https://i-blog.csdnimg.cn/direct/1ec65d9f74874f349a43154be1cb55e8.png
https://i-blog.csdnimg.cn/direct/8c29e315f6a7448c825cd0b58d091eb9.png


~ 完 ~

https://i-blog.csdnimg.cn/direct/2527de89e9a84e4985c92a24d22ce266.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: ★ Linux ★ 基础开发工具的利用(上)