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

相关推荐
这不小天嘛8 小时前
JAVA八股——J集合篇
java·开发语言
AOwhisky8 小时前
Python 学习笔记(第一期与第二期)——基础语法——核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发
星释9 小时前
鸿蒙智能体开发实战:23.常见问题
服务器·华为·ai·harmonyos·鸿蒙·智能体
天空'之城9 小时前
Linux 系统编程 22:五种 IO 模型全解
linux
小张成长计划..10 小时前
【Linux】10:冯·诺依曼体系结构和操作系统
linux·运维·服务器
喜欢的名字被抢了11 小时前
Python实战:SQLAlchemy ORM与FastAPI项目集成
开发语言·python·sql·教程·fastapi
从零开始的代码生活_13 小时前
C++ 内存管理:从内存分区到 new/delete 底层原理
开发语言·c++·后端
悦儿遥遥雨113 小时前
PXE + Kickstart 无人值守批量部署系统
linux·javascript·nginx
wabs66613 小时前
关于单调栈【力扣739.每日温度的思考】
java·开发语言
AOwhisky13 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制