gcc、gdb、makefile 学习和用法

时间:2021-12-17 00:17:18

 一、gcc

1、gcc通过后缀来区别文件类型:

  .c为C语言源文件;.C、.cc或.cxx为C++源文件;.h为头文件

  .o为编译后的目标文件;.s为汇编语言源文件;.i为C语言预处理文件

2、编译选项:

  -o filename 编译后输出文件名为filename

  -c 只编译,不连接,生成 .o文件

  -g 产生调试工具所必要的符号信息

  -O 或 -O2 优化编译连接 (time ./program 可以测试程序运行时间)

  -I/dirname  (大i) 将dirname加到程序头文件目录列表中。对于<>预处理程序cpp在系统预设的头文件(如/usr/include)搜寻相应的文件,而对于" ",cpp在当前目录中搜寻头文件。

  -L/dirname  将dirname加入到库文件目录(如/usr/lib)中

  -lname (小L) 在连接时将name库装载

  -static 连接静态链接库(默认为动态连接)

  -Wall 生成所有警告信息 -w 不生成警告

二、gdb

1、基本流程

a、编译生成可执行文件:gcc -g test.c -o test

b、启动GDB:  gdb test

c、在main函数处设置断点:break main (可写作 b main)

d、运行程序:run (可写作 r )

e、单步运行:next (可写作 n )

f、继续运行:continue (可写作 c )

g、退出:quit (可写作 q)

2、gdb命令

a、list(l) :显示程序及行数

b、break(b) 加

函数名:在函数的入口添加断点

行号:在制定行添加断点

文件名:行号  :在指定文件指定行添加断点

行号:if 条件 :当条件为真时断点生效

c、info break :查看所有断点

d、delete 断点号 :删除断点

e、step(s) :进入子程序运行。(区别于next)

f、print(p) 变量名 :查看指定变量

g、finish :运行程序直到当前函数结束

h、watch 变量名 :对指定变量进行监控

 

三、makefile

1、概述:

GNU的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。make在执行时,需要一个makefile文件。Makefile文件描述了整个工程的编译,链接等规则。

2、规则格式:

目标 : 依赖

     命令

如:

main.o : main.c

     gcc -c main.c

[注]

1、命令要以 [Tab] 开头。

2、最终的目标写在第一句。如果文件名不为makefile或Makefile可以通过:makefile -f 文件名来使用make。

3、没有任何依赖只有执行动作的目标称为伪目标通,常写作 .PHONY : clean

4、可以通过声明脚本变量来维护makefile。如:

obj=main.o func1.o func2.o

hello : $(obj)

         gcc $(obj) -o hello

5、系统变量:

$^:代表所有依赖文件

$@:代表目标

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

如:hello : main.o func1.o func2.o

              gcc main.o func1.o func2.o -o hello

可改写为:hello : main.o func1.o func2.o

                      gcc $^ -o $@

6、#后面为注释,@命令:取消命令回显