一、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、#后面为注释,@命令:取消命令回显