1 配置gcc
下载:
首先下载mingw,解压。
配置环境变量:
系统变量中找到Path,在Path中添加 D:\Program Files\MinGW\bin;
测试:
运行cmd,输入gcc -v就会看到其版本,否者,就配置没成功。
2 C/C++编译过程
程序名 hello.c
代码:
#include <stdio.h>
int main()
{
printf("hello\n");
}
int main()
{
printf("hello\n");
}
总编译过程
命令:gcc hello.c -o hello
此过程生成 hello.exe
实际上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。
2.1 预处理
预处理的过程主要处理包括以下过程:
- 将所有的#define删除,并且展开所有的宏定义
- 处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等
- 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
- 删除所有注释 “//”和”/* */”.
- 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
- 保留所有的#pragma编译器指令,因为编译器需要使用它们
gcc -E hello.c -o hello.i 或 gcc -E hello.c
hello.i存放经预处理后的代码。
2.2 编译
编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。
gcc -S hello.i -o hello.s
2.3 汇编
汇编器负责将生成的汇编代码转换为对应的机器码
gcc -c hello.s -o hello.o
2.4 连接
连接器将所有程序运行所需的所有目标文件,以及所依赖的其他库文件连接起来,生成可执行文件。
本程序是将其与c语言标准输入输出库进行连接,生成可自行文件。
gcc hello.o -o hello
3 多个程序文件的编译
通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。假设有一个由test1.c和 test2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序test,可以使用下面这条命令:
gcc test1.c test2.c -o test
如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。如果深究起来,上面这条命令大致相当于依次执行如下三条命令:
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test