Unix/Linux系统编程
一,开发工具
编译器 GCC
调试工具 GDB
代码编辑 Vim
1. 编译命令
gcc hello.c -o hello # 第二个hello为新生成的可执行文件名
-o 为生成的可执行文件指定名称。
-Wall 打印所有警告。
-E 把用户定义的所有的预定义#define展开,会生成 .i 后缀的C源文件。
-c 生成二进制文件,后缀名 .o
-g 生成可调试的可执行二进制文件
2. 调试命令
l list的简写,从第一行开始列出代码
break 16 设置断点,在代码第16行
break func 设置断点,在函数func()入口处
info break 查看断点信息
r run的简写,运行程序
n next的简写,执行下一条语句
p i print i 的简写,打印变量 i
c 继续运行程序,continue命令简写。
bt 查看函数堆栈。
finish 退出函数
q 退出gdb
二,编写Makefile
假设有三个文件 prog.c、 code.c、 code.h,对应的编译命令则是
$ gcc -c code.c -o code.o $ gcc -c prog.c -o prog.o $ gcc prog.o code.o -o test
但是一旦修改某个文件就需要再手打一遍以上三条命令。使用Makefile以后,只要一条简单的 make 命令就全部搞定。
Makefile 书写如下
test: prog.o code.o gcc prog.o code.o -o test prog.o: prog.c code.h gcc -c prog.c -o prog.o code.o: code.c code.h gcc -c code.c -o code.o clean: rm -f *.o test
更高级一点的,还可以加入宏来避免在Makefile出现的“硬编码”。
OBJS = prog.o code.o CC = gcc CFLAGS = -Wall test: $(BOJS) $(CC) $(OBJS) -o test $(CFLAGS) prog.o: prog.c code.h $(CC) -c prog.c -o prog.o $(CFLAGS) code.o: code.c code.h $(CC) -c code.c -o code.o $(CFLAGS) clean: rm -f *.o test
补充:
$@ 代表当前的目标(target)
makefile 规则
目标(target) : 目标文件1 目标文件2 <tab> gcc -o 欲新建的可执行文件 目标文件1 目标文件2
智慧在街市上呼喊,在宽阔处发声。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)