gcc编译、gdb调试、makefile编程
- gcc编译基本语法,目标文件如果没有指明,就自动生成a.out文件
- gcc编译四个步骤:预处理、编译、汇编、链接
gcc [选项] 准备编译的文件 [选项] [目标文件]
gcc编译常用参数:
-
-
- -I 指定头文件所在目录位置
- -c 只做预处理、编译、汇编。得到二进制文件
- -g 编译时添加调试文件,用于gdb调试
- -Wall 显示所有警告信息
- -D 向程序中“动态注册宏定义
- -l 指定动态库库名
- -L 指定动态库路径
-

GDB调试
使用gdb调试之前,要求对文件进行编译时增加-g参数,加了这个参数后会生成的编译文件会大一些,这是因为增加了gdb调试内容。
基础指令:gdb ./ a.out
- list:list 1 列出源码。根据源码指定行号设置断点
- b:b20 在20行位置设置断点。
- run/r :运行程序
- n/next: 下一条指令(会越过函数)
- s/step: 下一条指令 (会进入函数)
- p/print: p i 查看变量的值。
- continue :继续执行断点后续指令
- finish :结束当前函数调用
- quit:推出gdb当前调试
其他指令:
- run:使用run查找段错误出现位置
- set args:设置main函数命令行参数(在start、run之前)
- info b:查看断点信息表
- b 20 if i = 5 :设置条件断点
- ptype:查看变量类型
- bt:列出当前程序正存活者的栈帧
- frame:根据栈帧编号,切换栈帧
- display:设置跟踪变量
- undisplay:取消设置跟踪变量。使用跟踪变量的编号
Makefile编程:
makefile:管理项目
命名:makefile Makefile ---- make 命令
1个规则:
目标:依赖条件
命令
1. 目标的时间必须晚于依赖条件的时间,否则跟新目标
2.依赖条件如果不存在,找寻新的规则去产生依赖条件。
ALL:指定makefile的中级目标。
2个函数:
src = $(wildcard ./* .c):匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量src。 src = add.c sub.c div1.c
obj = $(patsubst %.c, %.o, $(src)) :将参数3中,包含参数1的部分,替换为参数2. obj= add.o sub.o div1.o
clean:(没有依赖)
-rm-rf $(obj) a.out "-": 作用是,删除不存在的文件时,不报错。顺序执行结束
3个自动变量:
$@:在规则的命令中,表示规则中的目标。
$^:在规则的命令中,表示所有依赖条件
$<:在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。
模式规则:
% .o : % .c
gcc -c $< -o $@
静态模式规则:
$(obj) : %. o: % .c
gcc - c $< - o $@
伪目标:
.phony:clean ALL
参数:
-n:模拟执行make、make clean命令
-f:指定文件执行make命令。
浙公网安备 33010602011771号