您的位置:首页 > 运维架构 > Linux

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中,存在系统默认的自动化变量
$^:代表所有的依赖文件
$@:代表目标
$<:代表第一个依赖文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gcc gdb makefile