man gcc is pretty good.
gcc:
-E: 只进行预处理
-S: 预处理和编译
-c: 预处理,编译和汇编
-g: 将gdb调试信息添加到可执行文件中
-save-temps: 保存中间文件
-Idirectory: 在包含文件搜索路径的起点处添加指定目录
-Ldirectory: 增加库文件的搜索路径
-library: 提示链接程序在创建最终可执行文件时包含指定的库
-O,-O2,-O3: 将优化状态打开,不能和-g参数一起使用
-Wall: 启动所有警报
-w: 禁止所有警报
-Werror-Wall: 在发生警报时取消编译操作
-Dmacro: 使用指定的宏,使他通过源码中的#ifdef进行校验
-v: gcc版本信息
gdb:
gdb program <core>/<PID>
break 16: 设置断点
break func: 在函数处设置断点
bt: 查看函数堆栈
r: 运行程序
l 1: 从第一行列出程序
s: 单步执行程序
c: 继续程序,直到新的断点
p result: 打印出当前的sum值
n:
finish: 退出子程序
q: 退出调试
makefile:
内置宏:
$<: 第一个依赖文件名称
$+: 所有依赖文件,可能重复
$^: 所有不重复的依赖文件
$?: 所有时间戳比目标文件晚的依赖文件
$*: 不包含扩展名的目标文件
[email protected]: 目标文件的完整名称
隐藏规则:
proc.o:proc.c code.h ==> proc.o:proc.c code.h \n gcc -c proc.c -o proc.o