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
智慧在街市上呼喊,在宽阔处发声。