gcc的流程
预处理 -E	.i
编译 -s 	.s 把c语言编译为汇编
汇编 -c 	.o 把汇编编译为二进制
链接
工程管理软件,它可以根据文件的时间戳进行编译,根据文件结构编译
app:main.o add.o
gcc main.o add.o -o appmain.o:main.c
gcc -c main.c -o main.oadd.o:add.c
gcc -c add.c -o add.o.PHONY:clean	伪目标clean:rm *.o app
自动变量
 $* 不包含扩展名的目标文件名称
 $+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
 $< 第一个依赖文件的名称
 $? 所有时间戳比目标文件晚的的依赖文件,并以空格分开
 $@ 目标文件的完整名称
 $^ 所有不重复的目标依赖文件,以空格分开
 $% 如果目标是归档成员,则该变量表示目标的归档成员名称
万能模版
OBJS=$(patsubst %.c,%.o,$(wildcard src/*.c))CC=gccCFLAGS= -Wall -O -g -I ./includeAPP=app$(APP):$(OBJS)$(CC) $(CFLAGS) $^ -o $@.PHONY:cleanclean:$(RM) *.o $(APP)
gdb调试
编译时需要加-g
运行 gdb a.out
b 设置断点
r 运行
n/s 单步运行
c 恢复运行
l 查看文件
info b 查看断点位置
p 查看变量值