gcc gdb make makefile

http://www.cnblogs.com/4925278/archive/2012/11/28/gcc-gdb-make-makefile.html


gcc-gdb-make-makefile

1、gcc编译程序时,编译、连接的过程可以被细分为四个阶段:

  预处理(Pre-Processing)

  编译(Compiling)

  汇编(Assembling)

  连接(Linking)

2、gcc通过文件的后缀来区别输入文件的类别:

  (1) 以.c为后缀的文件:C语言源代码文件。

  (2)以.a为后缀的文件:是由目标文件构成的库文件。

  (3)以.C,.cc.cxx为后缀的文件:C++源代码文件。

  (4)以.h为后缀的文件:头文件。

  (5)以.i为后缀的文件:已经预处理过的C源代码文件。

  (6)以.ii为后缀的文件:已经预处理琮的C++源代码文件。

  (7)以.o为后缀的文件:编译后没有连接的目标文件。

  (8)以.s为后缀的文件:汇编语言源代码文件。

  (9)以.S为后缀的文件:经过预编译的汇编语言源代码文件。

3、gcc的基本命令:

  命令格式:gcc [Option[filename]

  Option的取值:

    -o:指定编译后的目标文件名。

      gcc hello.c -o hello  --> hello

      gcc hello.c  -->a.out

    -c:只编译不连接成为可执行文件。

    -g:产生调试程序(GNU的gdb)所必要的符号信息。

    -O:对程序进行优化编译、连接,编译、连接的速度要慢一些。

    -O2:比-O更始的优化编译、连接,编译、连接过程序也会更慢。

    -Idirname:将dirname所指出的目录加入到程序头文件目录列表(/usr/include)中。

    -Ldirname:将dirname所指出的目录加入到库文件目录列表(/usr/lib)中。

    -lname:在连接时,装载名字为“libname.a”的函数库。

    -static:静态连接库文件。

    -Wall:生成所有警告信息。

    -w:不生成任何警告信息。

    -DMACRO:定义MACRO宏,等效于在程序中使用:#define MACRO

4、GDB调试程序

  (1)功能:

    a、启动被调试程序。

    b、让被调试程序在指定位置停住。

    c、当程序被停住时,检查程序状态。

  (2)相关命令

命     令 含                义

gdb 

gdb filename 

启动GDB
l/list 显示源程序(l+行号  显示第n行)
b/break 函数名 在某函数入口处添加断点
b/break 行号 在指定行添加断点
b/break 文件名:行号 在指定文件的指定行添加断点
b/break 行号 if 条件 当条件为真时,指定行的断点生效
info break 查看所有设置的断点
delete 断点编号 删除指定断点
r/run 开始运行程序
n/next 单步运行程序(不进入子函数)
s/step 单步运行程序(进入子函数)
c/continue 继续运行程序
p/print 变量名 查看指定变量的值
finish 运行程序,直到当前函数结束
watch 变量名 对指定变量进行监控
q/quit 退出gdb

 

      

 

 

 

 

 

 

 

 

 

 

 

 

5、make、makefile

  (1)Linux中使用make来构建和管理自己的软件工程,GNU的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。

  (2)make在执行时,需要一个命名为Makefile的文件,Makefile文件描述了整个工程的编译、连接等规则。

  (3)Makefile的编写:

    a、规则:用于说明如何生成一个或多个目标文件,规则格式为:

      targets:prerequisites

        command

      目标:依赖

        命令

      命令需要以tab键开始。

    b、make命令默认在当前目录下寻找名为makefile或Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定文件:make -f 文件名

    c、伪指令:没有任何依赖,只有执行动作的目标。

      如:.PHONY:clean

        clean:

          rm -f hello main.o func1.o func2.o

      ".PHONY"将"clean"目标声明为伪目标。

    d、变量

      基本用法:obj=main.o func1.o func2.o

            hello:$(obj)

              gcc $(obj) -o hello

      makefile中,存在系统默认的自动化变量:

        $^:代表所有的依赖文件

        $@:代表目标

        $<:代表每一个依赖文件

      makefile中的"#"字符后面的内容被视作注释。

      makefile中,“@+命令” 可以取消命令在执行时的回显。


你可能感兴趣的:(gcc gdb make makefile)