gcc通过后缀来区别文件的的类别

.c      c源文件
.a      由目标文件构成的库文件
.C .cc .cxx     C++的源文件
.h      头文件
.i      已经处理过的C源文件
.ii     已经处理过的C++源文件
.o      编译后的目标文件
.s      汇编语言的源文件
.S      经过预编译的汇编语言源文件
 
gcc [opt] [filename]
-o      确定可执行的名字,若不带,则生成a.out
-g      生成的应用程序带有gdb调试信息
-c      只编译,不连接成可执行程序
-O      对程序进行优化
-O2     更深度的优化
-Idirname  将dirname所指出的目录加入的程序头文件目录列表中来,标准文件在/usr/include/
-Ldirname   将dirname所指出的目录加入到库文件的目录列表中
-ldirname   在连接时,装载名字为libname.a的函数库,指定lname  例如连接数学库(libm.a)时,lm
-static     静态连接,gcc默认连接采用动态连接,静态连接会使应用程序大小成倍的增长
-Wall       显示所有的警告信息
-w          不显示所有的警告信息
-Dname      定义一个宏,相当于在程序中使用 #define name
 
 
GDB是GUN发布的一款功能强大的程序调试工具,GDB主要完成下面三个方面的功能
    1,启动被调试程序
    2,让被调试的程序在指定的位置停住
    3,当程序被停止时,可以检查程序的状态
GDB断点:
    b 函数名(break)
    b 行号
    b 文件名:行号
    b 行号 if 条件
 
    info b 查看所有的断点
    delete 断点编号 删除该断点
    r   开始执行程序run
    n   单步执行程序next(不进入子函数)
    s   单步执行程序step(进入子函数)
    c   继续执行程序,直到下一个断点,或程序结束(continue)
    p i 打印i的值(print)
    finish  运行程序,直到当前函数结束
    watch i 对指定的变量进行监控
    q   退出gdb(quit)
 
make
目标:依赖
    命令
hello:hello.c
    gcc main.c -o hello
 
伪目标:没有依赖,只有执行动作的目标
.PHONY:clean
clean:
    rm -f hello
变量:
obj = main.o func.o
hello:$(obj)
    gcc $(obj) -o hello

$^  :所有的依赖文件
$@  :目标
$<  :第一个依赖文件