编写文件mian.cpp,代码示例是 https://www.cnblogs.com/zjiaxing/p/5557549.html 中的。

	1 #include <iostream>
  2 using namespace std;
  3 #define pi 3.14
  4 static int t = 1;
  5 //这个注释是用来解释g++ -E预处理的过程的
  6 int main()
  7 {
  8     cout<<"Hello world: the t+pi" << t+pi<<endl;
  9     return 0;
 10 }

** 第一步 预处理**

执行如下

g++ -E main.cpp > main.i

会生成预处理文件,可以打开看看,一共生成了18150行,截取前十行如下

# 1 "main.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "main.cpp"
# 1 "/usr/local/include/c++/5.4.0/iostream" 1 3
# 36 "/usr/local/include/c++/5.4.0/iostream" 3

# 37 "/usr/local/include/c++/5.4.0/iostream" 3

这个不需要很懂,只是大概知道这个步骤是在进行预处理过程:替换掉定义的宏,代码中的注释也会删除,将#include的内容都插入进来。 可以查看main.i文件最后的部分如下,没有了注释,也没有宏,pi已被替换为3.14

using namespace std;

static int t = 1;

int main()
{
 cout<<"Hello world: the t+pi" << t+3.14<<endl;
 return 0;
}

第二步 编译成汇编代码 执行如下代码

g++ -S main.cpp

可以生成汇编代码,可以查看文件 main.s,105行汇编代码。

第三步 变成机器代码

 g++ -c main.cpp

可以看到main.o文件,这个就是main.cpp文件编译成的目标文件,该文件已经是二进制的机器代码,但是这个还不是可执行程序,因为一般而言,程序都不是一个目标文件构成,会有多个.cpp文件编译成多个.o文件,然后由这些.o文件链接成一个程序文件。

第四步 变成可运行程序

 g++ main.o -o main

至此生成一个main文件,执行 chmod u+x main,赋予执行权限,就可以通过./main文件执行代码了。