一、目的
很多小伙伴都是从IDE开始编程学习,记得那个时候我们用的还是VC++ IDE,不知道现在大学里面教学是否已经更新;一个代码从开始编写要最终的执行要经历多个过程,每个过程都会产生一些中间文件;下面就简单介绍一下各个过程,加深大家的理解。
二、介绍
上图就是源代码foo.c变成foo.out经历的整个过程,分别为预处理、编译、汇编、链接。
假设我们有这样一段代码:
#include <stdio.h>
int main(int argc, char **argv) {
printf("hello world\n");
return 0;
}
预处理
我们的代码中有时候需要通过`#include`预处理指令包含其他头文件或者通过`#define`命令定义一些宏,这些预处理指令是在编译之前被处理的(经过预处理器处理);
上面的代码中我们只有一个`#include`指令用来包含`stdio.h`这个头文件(因为我们需要通过printf进行一些打印)。
gcc -E foo.c -o foo.i
通过`-E`选项我们指示GCC进行预处理操作,`-o`选项用于指明输出文件名 ,我们可以打开foo.i这个文件查看里面的内容(内容较多不再贴出)
编译
将经过预处理后代码转换成汇编代码的过程。
gcc -S foo.i -o foo.s
汇编
将汇编代码转换成机器码,这一步骤会生成目标文件
gcc -c foo.s -o foo.o
链接
链接器将目标文件与其他目标文件(动态库、静态库)等链接起来生成可执行文件。
gcc foo.o -o foo.out
上面我们将编译的整个过程进行了分解,如果只是简单的进行编译只需要一行命令:
gcc foo.c -o foo.out
以上就是本篇所有内容,关于GCC的详细用法以及各个选项的含义后续有时间再分享。