C++编译过程

创建一个可执行文件是一个多级过程,其中包括预处理(preprocessing)、编译(compliation)、汇编(assembling)、链接(linking)。
在这里插入图片描述
1.预处理

# -E 选项指示编译器仅对输入文件进行预处理
g++ -E test.cpp -o test.i //.i文件

预处理就是预处理器对源代码中以#开始的预处理指令进行处理的过程。它会处理:
头文件包含指令(#include)
条件编译指令(#ifdef……#endif)
宏(#define)
删除所有的注释
添加行号和文件标识
保留所有的#pragma编译器指令

2.编译

# -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译
# g++ 产生的汇编语言文件的缺省扩展名是 .s
g++ -S test.i -o test.s

编译就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件.

3.汇编

# -c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码
# 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名。
g++ -c test.s -o test.o

汇编器是将汇编代码转变成机器可以执行的命令.

4.链接

# -o 编译选项来为将产生的可执行文件用指定的文件名
g++ test.o -o test

链接是把一堆对象文件和库(有时也可能仅仅是一个对象文件,但也需要链接)创建成一个单独的可执行文件。

直接编译

# 将 main.cpp src/Swap.cpp 编译为可执行文件 附带一堆参数
g++ main.cpp src/Swap.cpp -std=c++17 -O3 -g -Wall -o b.out
# 运行 b.out
./b.out
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值