Linux 开发工具实战:Makefile、Git 与 GDB 全流程指南
系统讲解 Linux 开发核心工具链。首先阐述 Makefile 的依赖关系、特殊符号及增量编译机制;其次通过进度条示例解析回车换行与缓冲区原理;接着梳理 Git 安装、配置、提交及推送流程;最后总结 GDB 调试常用指令及多文件调试方法,并附带五道涉及 yum、vi、makefile 及编译原理的练习题以巩固知识。

系统讲解 Linux 开发核心工具链。首先阐述 Makefile 的依赖关系、特殊符号及增量编译机制;其次通过进度条示例解析回车换行与缓冲区原理;接着梳理 Git 安装、配置、提交及推送流程;最后总结 GDB 调试常用指令及多文件调试方法,并附带五道涉及 yum、vi、makefile 及编译原理的练习题以巩固知识。

本文介绍 Linux 开发中常用的核心工具链和底层逻辑,涵盖 Makefile 规则、Git 版本控制流程、GDB 调试方法以及 C 语言基础实践。
make 是一个命令
语法:
make 目标文件名(例如:make clean)
makefile是一个文件(创建Makefile或makefile均可),需与使用命令的文件放在同一目录下。
text 依赖于 text.c)。.PHONY 可让 make 不判断该目标是否为真实文件,常用于 clean 等伪目标。makefile 中第一个出现的文件名是默认目标,直接输入 make 即可调用。make 会根据源文件和目标文件的修改时间判定是否需要重新编译。若源文件未修改,则跳过编译以提高效率。@:加在依赖方法前,使执行过程不回显命令。$@:表示目标文件。$^:表示所有依赖文件。变量 = 值:定义变量(例如 lib=libmymath.a)。\r):光标回到行首。\n):光标移动到下一行起始位置。\n 处理为回车换行组合。stdout 默认为行缓冲,未遇到换行符前数据暂存于缓冲区,程序结束或调用 fflush 后释放。#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main() {
int i = 0;
char bar[102];
memset(bar, 0, sizeof(bar));
const char *lable = "|/-\\"; // 旋转小圆圈字符
while (i <= 100) {
printf("[%-100s][%d%%][%c]\r", bar, i, lable[i % 4]);
fflush(stdout);
bar[i++] = '#';
usleep(10000); // 微秒级延时
}
printf("\n");
return 0;
}
注:C 语言中两个紧连的字符串常量会被编译器自动合并。
# 安装 git
yum install git
# 克隆远程仓库到本地
git clone [项目链接]
# 查看版本
git --version
# 三板斧操作
git add . # 添加当前目录所有修改
git commit -m "提交日志"
git push
# 查看记录与状态
git log # 查看提交记录
git status # 查看当前仓库状况
注意:上传的文件需位于包含
.git目录的仓库根目录下。
首次使用 git commit 时需配置用户信息:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
建议邮箱与远程仓库绑定一致,以便统计贡献。
.gitignore 文件用于指定上传时忽略的文件后缀。Readme。前提:程序必须使用 debug 模式编译(添加
-g参数)。
gdb 可执行程序名:启动调试器。l 行号/函数名:列出源代码。n:单步执行(不进入函数)。s:进入函数调用。b 行号/函数名:设置断点。info b:查看断点信息。finish:执行到当前函数返回。p 变量:打印变量值。set var 变量 = 新值:修改变量值(仅本次调试生效)。c:继续执行至下一个断点。r:从头运行程序。d 断点序号:删除断点。disable/enable 断点序号:禁用/启用断点。display 变量名:跟踪显示变量值。undisplay 序号:取消跟踪。until X 行号:跳转至指定行。info locals:查看局部变量。bt:查看调用栈。q 或 Ctrl+D:退出 gdb。多文件程序打断点时需指定源文件。
以下命令正确的是:
A. yum makecache 将服务器软件包信息缓存到本地
B. yum search 搜索包含指定关键字的软件包
C. yum clean all 清除缓存中老旧的头文件和软件包
D. yum upgrade 更新所有 rpm 软件包
答案:ABC
Vi 编辑器中,怎样将字符 AAA 全部替换成 yyy?
A. p/AAA/yyy/
B. s/AAA/yyy/g
C. i/AAA/yyy/
D. p/AAA/yyy/h
答案:B
下列关于 makefile 描述正确的有?
A. 保存了编译器和连接器的参数选项
B. 包含显式规则、隐晦规则、变量定义、文件指示和注释
C. 默认按顺序寻找 GNUmakefile、makefile、Makefile
D. 不可以使用 include 关键字
答案:ABC
关于编译阶段的编译优化说法不正确的是: A. 死代码删除指直接抛弃被注释的代码 B. 函数内联避免压栈退栈开销 C. for 循环变量适合调度到寄存器 D. 强度削弱用短指令替代长指令
答案:A
产生 parse tree 的过程是哪个阶段? A. 语法分析 B. 语义分析 C. 词法分析 D. 目标代码生成
答案:A

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online