一、基本概念
gcc编译源程序分为4个阶段:预处理、编译、汇编、链接
1、预处理阶段:将头文件的内容插入到源代码中、替换宏定义、去掉注释等。预处理后的文件后缀名为.i
2、编译阶段:编译器将预处理后的文件翻译成汇编代码文件(后缀名为.s)
3、汇编阶段:汇编器将汇编代码文件转化成二进制目标文件(后缀名为.o)
4、链接阶段:链接器将目标代码文件与实现库函数的代码合并,生成可执行文件(可执行文件在windows中以.exe结尾)
二、命令使用
命令格式:gcc <文件> <选项>
1、直接编译产生可执行文件
选项 |
说明 |
-o <文件名> |
在选项-o的后面跟着输出文件名 |
命令示例:
1. gcc main.c -o hello
gcc分别执行开头说的那四个阶段,生成可执行文件hello(如果不加上-o hello,Unix系统的默认输出文件名是a.out)
2. gcc main.c plus.c -o program (多个文件用空格分开)
gcc将这两个文件编译链接形成可执行文件program
2、指定生成各阶段的文件
选项 |
说明 |
-E |
预处理后的文件(.i) |
-S |
编译后得到的汇编代码文件(.s) |
-c |
汇编后得到的二进制目标文件(.o) |
命令示例:
1. gcc main.c -E -o main.i (使用-E选项必须指定输出文件名)
生成main.i文件
2. gcc main.c plus.c -S
生成main.s和plus.s汇编代码文件
3. gcc main.c plus.c -c
生成main.o和plus.o目标文件
执行上面的第一条命令,查看源文件和预处理后的.i文件。可以发现#include "plus.h"被换成了头文件里的内容,宏定义的Pi也已经替换成了3
3、其他常用选项
选项 |
说明 |
-Wall |
生成所有警告信息。(gcc默认只会生成错误信息,不会生错误信息) |
-On(n为1到3的数) |
对代码进行优化(减少程序运行时间和程序大小)(n的数字越大,优化等级越高) |
-I |
指定包含的头文件的路径 |
还有一些专门用于静态库和动态库的选项,这里就不再列举了。