GCC,GDB和MAKE
GCC 入门
前面已经提到过,linux的发展离不开GNU计划,而GNU的贡献就在于推出了很多高质量的免费的软件。而其中的GNU(全称为:GNU C Compiler)又是具有卓越贡献的软件。
GCC 的一般命令为 gcc [-选项1] 源文件名 [-选项2] 目标文件名
gcc hello.c -o hello 直接一步编译到底
gcc -E hello.c -o hello.i 只进行预处理
gcc -S hello.i -o hello.s 只进行编译,产生汇编程序
gcc -c hello.s -o hello.o 只进行汇编
gcc hello.o -o hello.exe 只进行链接
-o 的作用是指定文件名
另外选项1 如果是 -O 就是优化编译,编译后的程序效率会高一些。可以用命令 time ./hellol来查看一个可执行文件的执行时间
选项1 如果是 -static 就表明是静态链接。GCC默认是动态链接。
选项1 如果是 -g 就表明产生GDB调试所必须的符号信息。
ldd hello.exe 查看所需要的库
GCC默认的头文件搜索路径为 : usr/include目录
GCC默认的链接文件搜索路径是:/usr/lib目录。为什么需要链接?比如像printf 这样的函数,在程序里面用到了,并且所包含的头文件里面只有该函数的声明而没有该函数的定义,所以就需要链接。库文件的后缀名为.a 的为静态链接库 .so的为动态链接库。Gcc默认为动态链接库。
GDB 入门
1:Gdb常用命令
List(l) :查看程序
Break(b) 函数名/行号 : 设置断点
Info break :打印所有断点
Delete 断点编号 :删除断点
Run(r) :全速运行执行程序,除非有断点
Continue(c):继续全速执行程序
Next(n) :单步运行程序,不进入子函数
Step(s) :单步执行程序,进入子函数
Print(p) 变量名:打印变量值
Quit(q) 退出
GNU Make
1) 地位:linux程序员必须学会gnu make来构建和管理自己的软件工程。GNU的make可以使整个软件工程的编译,链接只需要一个命令。
2) 语法:
A)目标:依赖
命令
B) 注意命令之前以tab键空
C) 对于没有依赖的目标,比如进行声明,用.PHONY例如:
.PHONY clean
clean:
rm ……
D)几个特殊的符号:$^ 代表所有的依赖;$< 代表第一个依赖文件 ;$@ 代表目标
3)多源文件的Makefile实例