编写文件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文件执行代码了。