gcc,make,gdb命令用法

来源:互联网 发布:淘宝图片上传后变小 编辑:程序博客网 时间:2024/05/04 00:02

gcc

编译四阶段:
预处理 (展开头文件)
编译(语法检查,将c编译成汇编语言)
汇编(将汇编语言变为二进制)
链接(将头文件与c库链接)

1.预处理
由于在test.c中使用了头文件 stdio.h ,所以 gcc 编译时首先要把头文件stdio.h中的内容加载到test.c中的首部

gcc -E test.c -o test.i

2.编译(三个功能)
词法分析,主要负责检查关键字、标识符等是否正确。
语法分析,主要负责检查程序中语句的语法是否正确。
语义分析,主要负责检查程序中语句的逻辑意义是否正确。

gcc -S test.i -o test.s

3.汇编
汇编阶段的任务是把汇编程序翻译成 CPU 可以识别的二进制文件,该文件又称为目标文件。

gcc -c test.s -o test.o

4.链接
目标文件虽然已经可以被 CPU 直接识别,但是单个目标文件一般是无法运行的。原因在于一个程序往往是由多个源文件组成的,每个源文件只对应一个目标文件。也许有人会问, test 程序不就只有一个源文件 test.c 吗,为什么也不能直接运行呢?原因是 test.c 使用了 stdio.h 对应的库函数,所以必须要把 test.o 文件和函数库文件链接在一起才能运行。

gcc test.o -o test

此外,也可以直接输入命令得到可执行文件

gcc test.c -o test

make

vim name.c

(编写简单程序)

vim Makefile

(写makefile 主要告诉make要做的事情)格式为:

target:object
(Tab) command

target为目标,通常是要产生的文件的名称
object:(dependency)依赖, 指用来输入从而产生目标的文件
command: 命令, 是make的执行动作,一个命令占一行, 命令前第一个字符为TAB键.

CC = gcc target = hello   object = hello.o  $(target) : $(object)    (CC) $(object) -o $(target).PHONY:clean  " clean:    rm -rf target*.o

注:target 为目标,通常是要产生的文件的名称
Object 为依赖(dependency)指用来输入从而产生目标的文件
Command 为命令 是make的执行动作,一个命令占一行,命令前第一个字符为TAB键。(上面$(CC)、rm 前均有Tab键)

gdb 调试工具

GNU 开发了 GDB 调试器(GNU Debugger)。GDB 的调试功能非常强大,甚至可以和 Visual C++、Visual Basic、Jbuilder 等开发工具的调试器相媲美。但 GDB 的缺点是没有图形调试界面。

vim add.c

#include<stdio.h>Int add(int i,int j){Return(i+j);}Int main(){Int i=1,j=4,sum =0;Sum=add(i,j);Printf(“sum i %d”,sum);return 0;}

gcc -g add.c -o add
./add
sum is 5

gdb add(gdb) l  "列出源文件(gdb) r  "run 运行(gdb) b add  "设置断点 程序继续往下运行(gdb) c "continue (gdb) info b "查看断点信息(gdb) b 13 "在13行设置断点(gdb) n "next 查看 不会进入函数内部运行(gdb) s "step 可以在函数调用时进入函数内部运行