ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【Linux】 开发工具(Makefile、git、cgdb)解析与对于操作系统的基础认识

2026/8/23 20:12:35 拓冰建站 浏览量
【Linux】 开发工具(Makefile、git、cgdb)解析与对于操作系统的基础认识 目录前言Part1. MakefilePart1.1. 基础语法Part1.2. .PHONYPart1.3. Make增量编译原理Part1.4. 多文件递归编译示例Part1.5. Makefile变量Part1.6. 内置函数Part1.7. 模式规则Part1.8. 完整模板Part2. C语言缓冲区原理Part3. Git常用基础命令Part4. cgdb调试器Part5. 操作系统基础理解Part5.1. 为什么需要内存Part5.2. 数据流动Part5.3. 操作系统四大核心功能Part5.4. 内核态、用户态Part5.5. 操作系统对数据的管理Part6. 结语前言对于开发工具的熟练使用和Linux操作系统的理解是非常重要的来跟随小编的视角来看看吧。lets go!!!!!!!!Part1. MakefilePart1.1. 基础语法目标: 依赖 命令 示例 code: code.c gcc -o code code.c逻辑如果code.c修改过则执行gcc编译生成可执行文件code。Part1.2. .PHONY.PHONY: clean clean: rm -f code1.PHONY声明这是伪目标直接执行命令。2 执行清理make cleanPart1.3. Make增量编译原理make依靠文件修改时间戳判断要不要执行规则1依赖文件更新时间 目标文件更新时间执行编译。2 依赖没有改动多次make输出nothing to be done不会重复编译。3touch filename修改文件的三个时间戳可以欺骗make强制触发编译。Part1.4. 多文件递归编译示例A:A.o gcc A.o -o A A.o:A.s gcc -c A.s -o A.o A.s:A.c gcc -E A.c -o A.smake自上而下扫描递归解析依赖一层层生成中间文件。Part1.5. Makefile变量B code test: echo $(B)•取值语法$(变量名)自动化变量各个变量含义:1$ 当前规则的目标2$^ 全部依赖文件列表3$ 第一个依赖文件命令前加执行命令不在终端打印这条shell命令。例echo linking $^ - $Part1.6. 内置函数1wildcard匹配一批文件SRC : $(wildcard *.c)Part1.7. 模式规则%.o:%.c $(CC) $(CFLAGS) -c $ -o $ //含义任意.o由同名.c编译生成。Part1.8. 完整模板BIN app SRC $(wildcard *.c) OBJ $(SRC:.c.o) CC gcc $(BIN): $(OBJ) $(CC) -o $ $^ %.o:%.c $(CC) -c $ .PHONY:clean clean: rm -f $(BIN) $(OBJ)Part2. C语言缓冲区原理1行缓冲标准输出stdout是行缓冲遇到\n换行才刷新缓冲区打印到屏幕。printf(hello); sleep(3); // 不会立刻打印sleep结束才输出 printf(hello\n); sleep(3); // \n触发刷新立刻打印2fflush(stdout)强制刷新缓冲区不需要换行直接输出内容。3 格式化输出对齐•%xd右对齐占x字符宽度•%-xd左对齐占x字符宽度Part3. Git常用基础命令1git add .# 将所有修改加入暂存区2git status# 查看仓库当前状态3git commit -m 提交描述# 暂存区提交到本地仓库4git push# 推送到远程仓库5git clone 远程仓库地址# 克隆远程仓库到本地p.s.暂存区可以多次修改多次add统一一次commit、push。Part4. cgdb调试器gcc -g test.c -o test cgdb testGDB常用指令表指令功能q退出gdbl列出源代码l 行号从指定行展示源码b 行号设置断点b main在main函数打断点r运行程序c继续运行到下一个断点停下n 单步跳过函数调用s 单步进入函数内部bt打印函数调用栈backtracefinish跑完当前函数返回调用处p 变量名打印变量值info b查看全部断点信息disable 断点编号临时禁用断点enable 断点编号启用断点until 行号直接运行到指定行停下display 变量持续监视变量每次暂停自动打印undisplay 编号取消监视info locals打印当前函数所有局部变量watch 变量变量被修改程序自动停下set var xygdb内部修改变量的值condition 断点号 条件条件断点满足条件才停Part5. 操作系统基础理解Part5.1. 为什么需要内存CPU只能直接读写内存不能直接读写磁盘。磁盘速度很慢CPU运算速度极快内存作为中间高速缓存用来匹配CPU和外设的速度差距。程序运行过程1 可执行文件存放在磁盘。2 运行程序操作系统把程序加载到内存。3CPU从内存读取指令、数据执行。Part5.2. 数据流动磁盘 → 内存 → CPU运算 → 内存 → 网卡(输出外设)发给对方对方网卡接收放入内存处理最后写入磁盘保存。所有外设都不和CPU直接打交道数据必经内存中转。Part5.3. 操作系统四大核心功能1进程管理2内存管理3文件管理4驱动设备管理Part5.4. 内核态、用户态•应用程序跑在用户态不能直接访问硬件、内存、设备。• 想要操作硬件必须调用系统调用陷入内核态由操作系统内核完成硬件操作。•高内聚低耦合上层应用只调用接口底层驱动封装硬件细节。Part5.5. 操作系统对数据的管理操作系统把各式各样来自硬件的数据统一抽象成数据结构完成增删查改。通过结构体描述管理对象进程PCB、文件描述符等保存元信息完成管理。Part6. 结语这篇文章我们认识到了Linux开发工具和操作系统的相关知识接下来小编还会带来更多Linux相关的知识敬请期待~最后祝大家可以春风得意马蹄疾一日看尽长安花最后的最后要是觉得本文还可以的话可以点点赞关注小编一波谢谢大家~