总体过程
gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:
- 预处理,生成 .i 的文件[预处理器cpp]
g++ -i xxx.cpp // xxx.i
- 将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]
g++ -s xxx.i // xxx.s
- 有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]
g++ -c xxx.s // xx.o
- 连接目标代码, 生成可执行程序 [链接器ld]
g++ -o xxx xxx.cpp //xxx.exe
其他编译参数
调试
-g 编译带调试信息的可执行文件
-O[n] 优化源代码(O大写)
-l和 -L 指定库文件 | 指定库文件路径
# -l参数(小写)就是用来指定程序要链接的库,-l参数紧接着就是库名
# 在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接
# 举例-l链接glog库
g++ -lglog test.cpp
# 如果库文件没放在上面三个目录里(及不在lib),需要使用-L参数(大写)指定库文件所在目录
# -L参数跟着的是库文件所在的目录名
# 举例-L链接mytest库,libmytest.so在/home/bing/mytestlibfolder目录下
g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
-I (大写i) 指定头文件搜索目录
# -I
# /usr/include目录一般是不用指定的,gcc知道去那里找,但 是如果头文件不在/usr/icnclude
里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-
I/myinclude 参数了,如果不加你会得到一个”xxxx.h: No such file or directory”的错
误。-I参数可以用相对路径,比如头文件在当前 目录,可以用 -I. 来指定。上面我们提到的–cflags参
数就是用来生成-I参数的。
g++ -I/myinclude test.cpp
-Wall 打印警告信息
-w 关闭警告信息
-std=c++11 设置编译标准
-o 指定输出文件名
-D 定义宏