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命令。那么:

相关推荐
CHHH_HHH5 分钟前
【Linux系统篇】深入解析Linux文件系统:从磁盘寻址到软硬链接
linux·服务器·开发语言·后端·ubuntu
剑锋所指,所向披靡!6 分钟前
TCP并发服务器
服务器·网络·tcp/ip
yngsqq13 分钟前
窗体快速取消
java·开发语言
XiaQ091942 分钟前
Linux 常用命令学习笔记(用户管理篇):用户、组与权限的钥匙
linux·开发语言·笔记·学习
不可求~1 小时前
C++ 报错交给 AI 之前,先准备好这 8 类信息
开发语言·c++·人工智能
名字还没想好☜1 小时前
用 Python struct 解析二进制协议:pack/unpack、字节序与对齐踩坑
开发语言·python·二进制·struct
刚入门的大一新生1 小时前
Linux-Linux的进程状态
linux·运维·服务器
AI备忘录1 小时前
(十一)DHCP 配置命令五厂商对照:华为 华三 锐捷 迈普 思科
服务器·网络·网络协议·网络安全·华为
随便做点啥1 小时前
32卡×4090 24GB,Qwen3.8-27B-FP8 集群部署报告
服务器·经验分享·docker·vllm
一知半解仙1 小时前
当机器人学会泛化,而我在写Java:一名后端开发者的2026年8月21日观察手记
java·开发语言·机器人