g++ test.cpp
直接编译test.cpp 为a.out
a.out运行可以得到输出结果

 

设定文件所使用的语言, 使后缀名无效, 对以后的多个有效 -x

-x language filename

g++ -x c test.alpaca

 

命名 -o
g++ test.cpp -o filename
用以生成指定文件名的文件

只编译不链接 -c
g++ test.cpp -c
生成test.o,该文件含有编译后的机器代码但是没有被链接成可执行程序
再对test.o进行编译:
g++ test.o
结果和直接 g++ test.cpp 是一样的

传递选项给链接器 -WL,-option
g++ -Wl,-option test.o
含义是将-option参数传递给链接器linker
这个option的功能与链接的库有关,g++默认的情况下链接的是动态库,但是我们能够通过这个option(比如Bstatic和Bdynamic)来指定链接动态库或者静态库
-Wl,Bstatic 后面的-lxxx都是静态库
-Wl,Bdynamic 后面的-lxxx都是动态库
静态库(.a,.lib)都是被编译在文件里的
动态库(.so,.dll)则是被安装在系统里的,在很多程序需求同样的库时不会造成空间浪费
详情看https://www.runoob.com/w3cnote/cpp-static-library-and-dynamic-library.html

 

预处理后停止 -E
生成.i预编译文件

汇编后停下来 -S
生成.s汇编源文件

指定c++版本 -std=c++[version]
-std=c++11

 

  • 优化

-O{num} num取0~3:O0为无优化 O3则为优化的最高级别

-Ofast :违反规定追求极致性能

-mach=native:针对当前机器特定优化

 

  • 头文件库相关

给搜索头文件的路径添加一个目录 -I [dir]

给搜索库文件的路径添加一个目录 -E [dir]

链接指定库 -l

使用静态库 -static (类似于-Wl,-Bstatic)

使用动态库 -shared(类似于-Wl,-Bdynamic)

 

  • 报错于反馈相关

显示所有警告信息 -W

禁止显示所有警告信息 -w

开启所有常见警告 -Wall

所有警告视为错误 -Werror

严格遵循ISO C++要求 -pedantic

当程序中地址不需要对齐的指针指向一个地址需要对齐的变量地址时警告 -Wcast-align

输出工作详细过程  -v

显示编译过程的统计数据 -Q

显示当前gcc支持cpu类型 –target-help

 

 

  • 调试相关

产生调试信息 -g

以 stabs 格式声称调试信息, 但是不包括 gdb 调试信息 -gstabs

以 stabs 格式声称调试信息, 并且包含仅供 gdb 使用的额外调试信息 -gstabs+

可能的生成 gdb 的可以使用的调试信息 -ggdb

将剖析(Profiling)信息加入到最终生成的二进制代码中 -p  或者 -pg

保存编译过程中生成的一些列中间文件 -save-temps