在实际过程中,通过gcc来编译程序是很低效的,原因有以下两点:
1.程序往往由多个源文件组成,源文件越多,gcc命令行越长。同时各种编译规则会增加编译的复杂度。
2.在调试过程中,每次调试一般只会修改部分源文件,但是用gcc命令,会把没有修改的源文件也一起编译,这样会影响编译的整体效率。
gcc提供了半自动化的工程管理器Make。
使用make命令前,需编写编译规则至Makefile这个文件中。
创建Makefile后,使用vim Makefile 进行编辑。
Makefile中由以下内容组成
1.生成的目标文件 (target file)
2.生成目标文件所需的依赖文件(dependency file)
3.生成目标文件的编译规则命令行(command)
格式:
target file : dependency file
(tab)command
或者:
cc=gcc
target=
object=
$(target):$(object)
(tab)$(cc) $(object) -o $(target)
其中object后面可以跟多个依赖文件。
举例:
cc=gcc
target=hello
object=hello.o
$(target):$(object)
(tab)$(cc) $(object) -o $(target)
clean命令
在Makefile中写
clean:
(tab)rm -rf hello *.o
意为清楚生成的可执行文件和依赖文件
倘若有某个目录叫做clean
则需添加伪目标.PHONY:clean
伪目标不是真的目标文件,只是一个符号,通过伪目标可以make工程管理器只执行规则命令。
gdb
gdb用于调试程序
命令: gcc -g test.c -o test
gdb test
指令:
info b | 查看设置的断点 |
list(或l) | 列出源代码,接着上次的位置往下列,每次列10行 |
b | 设置断点 b+行号 |
list 函数名 | 列出某个函数的源代码 |
next(或n) | 执行下一行语句 |
print(或p) | 打印表达式的值,通过表达式可以修改变量的值或者调用函数 |
quit(或q) | 退出gdb 调试环境 |
print (或p) | 查看变量值 |
run(或r) | 开始执行程序 |
step(或s) | 执行下一行语句,如果有函数调用则进入到函数中 |