Linux -- 基础开发工具

1Linux编辑器-vim使⽤

1.1vim的基本概念

vim是linux下的编辑器,⽬前掌握这3种即可,分别是命令模式(command mode)、插⼊模式(Insert mode)和底⾏模式(last line mode),各模式的功能区分如下:

1.2 vim的基本操作

• 进⼊vim,在系统提⽰符号输⼊vim及⽂件名称后,就进⼊vim全屏幕编辑画⾯

• 不过有⼀点要特别注意,就是你进⼊vim之后,是处于正常模式,你要切换到插⼊模式才能够 输⼊⽂字。

正常模式切换⾄插⼊模式

• ⽬前处于插⼊模式,就只能⼀直输⼊⽂字,如果发现输错了字,想⽤光标键往回移动,将该字删 除,可以先按⼀下「ESC」键转到正常模式再删除⽂字。当然,也可以直接删除

正常模式切换⾄末⾏模式

输入 shift+; 其实就是:

退出vim及保存⽂件,在正常模式下,按⼀下「:」冒号键进⼊「Last line mode」,例如:

1.3 vim正常模式命令集

插⼊模式

1.4 vim末⾏模式命令集

1.5 vim操作总结

2. 编译器gcc/g++

背景知识

2.1.1 预处理(进⾏宏替换)

2.1.2 编译(⽣成汇编)

2.1.3 汇编(⽣成机器可识别代码)

2.1.4 连接(⽣成可执⾏⽂件或库⽂件)

2.2 动态链接和静态链接

在我们的实际开发中,不可能将所有代码放在⼀个源⽂件中,所以会出现多个源⽂件,⽽且多个源⽂ 件之间不是独⽴的,⽽会存在多种依赖关系,如⼀个源⽂件可能要调⽤另⼀个源⽂件中定义的函数, 但是每个源⽂件都是独⽴编译的,即每个*.c⽂件会形成⼀个*.o⽂件,为了满⾜前⾯说的依赖关系,则 需要将这些源⽂件产⽣的⽬标⽂件进⾏链接,从⽽形成⼀个可以执⾏的程序。这个链接的过程就是静 态链接

静态链接的缺点很明显:

动态链接 的基本思想是把程序按照模块拆分成各个相对 独⽴部分,在程序运⾏时才将它们链接在⼀起形成⼀个完整的程序,⽽不是像静态链接⼀样把所有程序模块都链接成⼀个单独的可执⾏⽂件。 动态链接其实远⽐静态链接要常⽤得多。

2.3 静态库和动态库

2.4gcc其他常⽤选项 了解即可

3.⾃动化构建-make/Makefile

• make是⼀条命令,makefile是⼀个⽂件,两个搭配使⽤,完成项⽬⾃动化构建。

3.1基本使⽤

实例代码

cpp 复制代码
#include <stdio.h>
int main()
{
 printf("hello Makefile!\n");
 return 0;
}

Makefile⽂件

cpp 复制代码
myproc:myproc.c
 gcc -o myproc myproc.c
 
.PHONY:clean
clean:
 rm -f myproc

依赖关系

• 上⾯的⽂件myproc,它依赖myproc.c

依赖⽅法

• gcc -o myproc myproc.c ,就是与之对应的依赖关系

项⽬清理

• 像clean这种,没有被第⼀个⽬标⽂件直接或间接关联,那么它后⾯所定义的命令将不会被⾃动 执⾏,不过,我们可以显⽰要make执⾏。即命令⸺⸺"make clean",以此来清除所有的⽬标 ⽂件,以便重编译。clean 目标的本质是删除创建的不需要的临时文件

• 但是⼀般我们这种clean的⽬标⽂件,我们将它设置为伪⽬标,⽤ .PHONY 修饰,伪⽬标的特性 是,总是被执⾏的

cpp 复制代码
$ stat XXX
 File: 'XXX'
 Size: 987 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1321125 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ whb) Gid: ( 1000/ whb)
Access: 2024-10-25 17:05:30.430619002 +0800
Modify: 2024-10-25 17:05:25.940595116 +0800
Change: 2024-10-25 17:05:25.940595116 +0800
⽂件 = 内容 + 属性
Modify: 内容变更,时间更新
Change:属性变更,时间更新
Access:常指的是⽂件最近⼀次被访问的时间。在Linux的早期版本中,每当⽂件被访问时,其
atime都会更新。但这种机制会导致⼤量的IO操作。具体更新原则,不做过多解释。

.PHONY:让make忽略源⽂件和可执⾏⽬标⽂件的M时间对⽐

3.2推导过程

cpp 复制代码
myproc:myproc.o 
 gcc myproc.o -o myproc
myproc.o:myproc.s 
 gcc -c myproc.s -o myproc.o
myproc.s:myproc.i 
 gcc -S myproc.i -o myproc.s
myproc.i:myproc.c 
  gcc -E myproc.c -o myproc.i
 
.PHONY:clean 
clean: 
 rm -f *.i *.s *.o myproc

编译

cpp 复制代码
$ make
gcc -E myproc.c -o myproc.i
gcc -S myproc.i -o myproc.s
gcc -c myproc.s -o myproc.o
gcc myproc.o -o myproc

• make是如何⼯作的,在默认的⽅式下,也就是我们只输⼊make命令。那么:

相关推荐
又見山几秒前
Codex 实战:用 AI 写运维脚本
运维·人工智能
Elastic 中国社区官方博客3 分钟前
Elasticsearch 向量数据库:几分钟内完成部署,以经济高效的方式扩展至数千亿规模
大数据·运维·数据库·elasticsearch·搜索引擎·ai·全文检索
我是唐青枫9 分钟前
C#.NET PInvoke 深入解析:封送、内存布局与原生互操作实战
开发语言·c#·.net
新兴AI民工14 分钟前
【Linux内核三十九】进程管理模块:CFS负载均衡(四):find_busiest_group决策矩阵与calculate_imbalance
linux
程序猿编码19 分钟前
纯C++轻量计算机视觉推理引擎:基于GGML的端侧CV模型部署技术全解析
开发语言·c++·计算机视觉·大模型·transformer
LongRunning29 分钟前
【linux】RK3568(五)云服务器-视频推流
linux
SEO_juper36 分钟前
外贸多语言站最隐蔽的流量杀手:hreflang 错了,谷歌把德语页推给美国人(附审计脚本)
开发语言·前端·python·seo·独立站·谷歌优化
赵民勇42 分钟前
resolvectl命令详解
linux·运维
新时代牛马1 小时前
Linux 日志管理:journald、rsyslog 与 logrotate
linux·运维·服务器
あ-1 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台
运维·网络·devops