gcc [option | filename]bash
一、预处理阶段函数
gcc -E -o [目标文件] [编译文件]工具
gcc -E -o hello.i hello.c优化
二、编译阶段ui
gcc -S -o hello.s hello.ispa
三、汇编阶段线程
gcc -c hello.s -o hello.o调试
四、连接阶段code
gcc hello.o -o hello递归
分为Wall类 和 非Wall类
静态库(.a) 和 动态库(.so和版本号组成)。库都存放在/usr/lib 和 /lib 目录中
例如:libm.so.5 标识符为m,版本号为 5,
二、相关路径选项
1) -I<dir>
改变搜索路径
gcc hello.c -I/root/workspace/gcc/ -o hello
2) -L<dir>
用于指明库文件的路径。
例如:程序hello_sq.c须要用到目录“/root/workspace/gcc/lib”下的一个动态库libsunq.so,则
gcc hello_sq.c -L/root/workspace/gcc/lib -lsunq -o hello_sq
“-I<dir>" 和 “-L<dir>”都只是指定了路径,而没有指定文件,所以不能再路径中包含文件名。
三、使用不一样类型连接库
选项“-l”(小写的L),用于指定具体使用的库文件。库都是以“lib”开头,只需填写lib以后的内容。
若是libm.a和libm.so同时存在,默认连接共享库。写做“-lm”便可
若是选用静态库,则在“-l”以前添加选项“-static”。例如,连接libm.a库文件的选项是“-static -lm”。
编译选项 -On 控制优化代码的生成,其中n是一个表明优化级别的整数。比较典型的范围是从0到2或3。
优化选项-O 主要进行线程跳转(Thead Jump)和延迟退栈(Deferred Stack Pops)两种优化。
优化以后,难于调试。
功能:
#include <stdio.h> void add(int m) { int i,n = 0; for (i = 1; i <= m; i++) { n += i; } printf("The sum of 1-%d in add is %d\n", m, n); } int main() { int i,n = 0; add(50); for (i = 1; i <= 50; i++) { n += 1; } printf("The sum of 1-50 is %d \n", n); }
编译时要加上“-g”选项。
一、进入GDB
#gdb test
二、查看文件
“l”(list)查看程序的源码
三、设置断点
在 “b” 后加入对应的行号便可
(gdb) b 6
四、查看断点处状况
(gdb) info b
五、运行代码
GDB默认从首行开始运行代码,键入“r”(run)便可
六、查看变量值
“p 变量值”
(gdb) p n $1 = 0 (gdb) p i $2 = 1345
“$N”标记,当前变量值的引用标记。
七、观察变量
在某循环处,“watch”来观察变量的变化状况
(gdb) watch n
八、单步运行
“n”(next)便可
九、程序继续运行
“c”(continue)继续运行,直到遇到断点或程序结束
十、退出GDB
“q”(quit)便可退出
Makefile是make读入的惟一配置文件。
一般包含以下内容:
格式为:
target: dependency_files /t command
#The simplest example hello.o: hello.c hello.h /t gcc -c heelo.c -o hello.o
接着就可使用make了。使用make的格式为:make target,这样make就会自动读入Makefile执行对应target的command语句,并会找到相应的依赖文件。
#make hello.o gcc -c hello.c -o hello.o #ls hello.c hello.h hello.o Makefile
在Makefile中的每个command前必须有“Tab”符。
1.5.二、Makefile变量
定义的名字,用来代替一个文本字符串,该文本字符串称为该变量的值。
变量的值能够用来代替目标体、依赖文件、命令及Makefile文件中的其余部分。在Makefile中的变量定义有两种方式:一种是递归展开方式,另外一种是简单方式。
递归展开方式定义的变量是在引用该变量时进行替换的,即若是该变量包含了对其余变量的引用,则在引用该变量时一次性将内嵌的变量所有展开。
简单扩展型变量的值在定义处展开,且只展开一次,消除了变量的嵌套引用。
递归展开方式的定义:VAR=var
简单扩展方式的定义:VAR:=var
make中变量的使用格式为:$(VAR)
变量名是大小写敏感的。推荐使用小写字母
Makefile中的变量分为用户自定义变量、预约义变量、自动变量及环境变量。
预约义变量包含了常见编译器、汇编器的名称及编译选项。
CC=gcc testgdb01.o: testgdb01.c testgdb01.h $(CC) -c testgdb01.c -o testgdb01.o clean: $(RM) testgdb01.o
自动变量一般能够表明编译语句中出现的目标文件和依赖文件等,而且具备本地含义。
make在启动时会自动读取系统当前已经定义了的环境变量,而且会建立与之具备相同名称和数值的变量。
Makefile的规则包括目标体、依赖文件及其间的命令语句,是make进行处理的依据。Makefile中的一条语句就是一个规则。
make还定义了隐式规则和模式规则。
一、隐式规则
隐式规则可以告诉make怎么使用传统的技术完成任务。
隐式文件只能查找相同文件名的不一样扩展名文件。
二、模式规则
隐式规则仅仅可以用make默认的变量来进行操做。
模式规则是用来定义相同处理规则的多个文件的,模式规则能引入用户自定义变量,为多个文件创建相同的规则,简化Makefile的编写。
模式规则的格式相似于普通规则,这个规则中的相关文件前必须用“%”标明。
直接运行make,则创建Makefile中的第一个目标。