Linux笔记_gcc_gdb_makefile
2015-01-24 21:55
309 查看
GCC(一般情况下:gcc -g hello.c -o hello一次性解决)
1.预处理阶段:gcc -E hello.c -o hello.i---把头文件编译进来,将宏展开
2.编译阶段: gcc -S hello.i -o hello.s----检查代码的规范性,语法错误,编译成汇编语言
3.汇编阶段: gcc -c hello.s -o hello.o-----把编译阶段生成的.s文件转成目标文件,即二进制代码;
4.链接阶段: gcc hello.o -o hello -------链接后生成可执行文件
静态链接:每个程序都有一个库的拷贝;动态链接:共享一个库
-D 相当于在程序里面宏定义(#define)
-static 静态链接库文件
-L 多一个可以寻找库文件的地方
-I directory路径 除了可以从系统目录查找include头文件,还可以到该目录下查找头文件
-O 对程序进行优化编译、链接,采用这个选项整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是编译链接的速度相应地要慢一些。
-O2 比-O更好的优化编译、链接,当然整个编译,链接的过程会更慢。
-g在可执行程序中包含标准调试信息
-w 关闭所有告警
-Wall 允许发出gcc提供的所有有用的报警信息
-pedantic 允许发出ANSI C标准所列的全部警告信息
///////////////////////////////////////////////////////////////////////////////****************************************************************************
GDB
使用前编译文件一定要加上选项“-g”,这样编译处的可执行代码才包含调试信息,否则之后gdb无法载入该可执行文件。
使用格式:gdb test(test为可执行文件)
(gdb) l 5 列出5行前后共十行的代码;
(gdb) b 6 设置断点;b 函数名;b 文件名:行数;b 行号 if 条件(b 23 if i=10)
(gdb) d 2 删除断点
(gdb) info b 查看断点情况;
(gdb) r 运行代码,到断点处停止;
(gdb) p varieties 显示变量值
(gdb) n(s) 单步运行 s会进入函数,n不会;
(gdb) c 恢复程序运行
(gdb) help 求助
///////////////////////////////////////////////////////////////////////////////*******************************************************************************
Makefile:工程管理器,好东西,既可以一次性编译全部依赖文件,又可以用时间戳来减少需要重新编译的文件,达到节省时间提高效率的效果
格式:
target:dependency_files
command -------注意,一定要Tab,不能空格。
编译:直接make 或者 make target(目标文件)
伪目标:没有任何依赖只有执行动作的目标
example:
.PHONY:clean ----将clean目标声明为伪目标
clean:
rm -f hello main.o func1.o func2.o
Makefile变量(类似宏定义,方便修改添加):
例子:obj=main.o func1.o func2.o
hello:$(obj)
gcc $(obj) -o hello
*****************************************************************
在makefile中,存在系统默认的自动化变量
$^:代表所有的依赖文件
$@:代表目标
$<:代表第一个依赖文件
1.预处理阶段:gcc -E hello.c -o hello.i---把头文件编译进来,将宏展开
2.编译阶段: gcc -S hello.i -o hello.s----检查代码的规范性,语法错误,编译成汇编语言
3.汇编阶段: gcc -c hello.s -o hello.o-----把编译阶段生成的.s文件转成目标文件,即二进制代码;
4.链接阶段: gcc hello.o -o hello -------链接后生成可执行文件
静态链接:每个程序都有一个库的拷贝;动态链接:共享一个库
-D 相当于在程序里面宏定义(#define)
-static 静态链接库文件
-L 多一个可以寻找库文件的地方
-I directory路径 除了可以从系统目录查找include头文件,还可以到该目录下查找头文件
-O 对程序进行优化编译、链接,采用这个选项整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是编译链接的速度相应地要慢一些。
-O2 比-O更好的优化编译、链接,当然整个编译,链接的过程会更慢。
-g在可执行程序中包含标准调试信息
-w 关闭所有告警
-Wall 允许发出gcc提供的所有有用的报警信息
-pedantic 允许发出ANSI C标准所列的全部警告信息
///////////////////////////////////////////////////////////////////////////////****************************************************************************
GDB
使用前编译文件一定要加上选项“-g”,这样编译处的可执行代码才包含调试信息,否则之后gdb无法载入该可执行文件。
使用格式:gdb test(test为可执行文件)
(gdb) l 5 列出5行前后共十行的代码;
(gdb) b 6 设置断点;b 函数名;b 文件名:行数;b 行号 if 条件(b 23 if i=10)
(gdb) d 2 删除断点
(gdb) info b 查看断点情况;
(gdb) r 运行代码,到断点处停止;
(gdb) p varieties 显示变量值
(gdb) n(s) 单步运行 s会进入函数,n不会;
(gdb) c 恢复程序运行
(gdb) help 求助
///////////////////////////////////////////////////////////////////////////////*******************************************************************************
Makefile:工程管理器,好东西,既可以一次性编译全部依赖文件,又可以用时间戳来减少需要重新编译的文件,达到节省时间提高效率的效果
格式:
target:dependency_files
command -------注意,一定要Tab,不能空格。
编译:直接make 或者 make target(目标文件)
伪目标:没有任何依赖只有执行动作的目标
example:
.PHONY:clean ----将clean目标声明为伪目标
clean:
rm -f hello main.o func1.o func2.o
Makefile变量(类似宏定义,方便修改添加):
例子:obj=main.o func1.o func2.o
hello:$(obj)
gcc $(obj) -o hello
*****************************************************************
在makefile中,存在系统默认的自动化变量
$^:代表所有的依赖文件
$@:代表目标
$<:代表第一个依赖文件
相关文章推荐
- gcc gdb makefile学习笔记
- 【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)
- Linux学习之GCC&GDB,Makefile
- Linux笔记--4 -- GDB和makefile
- Linux总结——gcc、gdb、makefile文件
- Linux 开发工具学习(gcc 、gdb和makefile)
- Linux学习 [2] vi编辑器 gcc工具链 make和Makefile gdb调试工具
- Linux下开发环境(gcc/g++/makefile/gdb)
- linux笔记(gcc及gdb调试)
- Linux 开发工具 ---gcc makefile gdb
- Linux GCC编译、gdb调试、makefile、动态链接库的创建
- linux-3.基础-gcc/gdb/makefile
- linux系统开发 1 基础apt-get 进程 作业 环境变量 安装vsftpd vim gcc gdb Makefile
- Linux下开发环境(gcc/g++/makefile/gdb)
- gcc、makefile、gdb学习笔记
- linux笔记(gcc及gdb调试)
- 【课堂笔记】Linux中的MakefileShellGDB工具
- 2012.2.29 linux学习笔记 gcc makefile的使用
- Eclipse远程开发调试Linux应用程序,Eclipse+cdt+Uniwin+Ubuntu+gcc+gdb,打造超级Linux开发平台
- Linux学习笔记:GDB常用命令