-Wall
-Wextra
-Wshadow
-Wundef
-Wconversion
-fno-common
:避免全局变量-Wfloat-equal
-Wunreachable-code
-Wformat=2
:检查printf
和scanf
的格式控制符-fmudflap
:在运行时检查指针操作以捕获未定义行为-fno-exceptions
:在代码中使用异常时,报错-ffast-math
;要求高性能,但不要求精度-fomit-frame-pointer
:省略栈帧-fno-plt
-ipo
:开启过程间优化-no-pie
:关闭位置无关-fPIE
:positionindependent executable,生成位置无关可执行文件-fPIC
:position independent code,生成位置无关代码,用于生成共享库-rpath
:指定运行时共享库的搜索路径-Wl
:让编译器将后面逗号分隔的参数传给链接器(-Wl,-rpath
)-m32
:编译32位程序-pedantic
:对非C++标准的扩展发出警告-fanalyzer
:启用静态分析,以报告更多问题(有更高的overhead)-fstack-protector
:检查缓冲区溢出-flto
:开启链接时优化,通常编译器只会在单个翻译单元内进行优化,这样可以在整个程序上优化-rdynamic
:指示链接器将所有符号(不仅是已经使用的)都添加到动态符号表中-march=native
-mtune=native
:根据CPU进行特定优化-ftree-vectorize
:将循环转化为向量化指令-floop-nest-optimize
:优化嵌套循环-I
-L
:指定链接时查找的include文件夹和共享库文件夹,环境变量$LD_LIBRARY_PATH
为运行时查找的共享库文件夹-save-temps
:保留所有编译的中间文件(.c
,.i
,.s
,.o
)-v
:输出详细信息-E
:只进行编译预处理-S
:生成汇编(一般产生的汇编以.s
为后缀,而自己写的以.S
为后缀,也是为了避免被覆盖)-l
:链接-Os
:优化文件大小,-Oz
更激进-g
:添加debug信息(dwarf)默认选项,同-g2
-g0
:不生成任何调试信息,和编译时不加-g
是一样的。-g1
:生成最少量的调试信息,这些信息足够用来通过backtrace查看调用栈符号信息。主要包括了函数声明、外部变量和行号等信息,但是不包含局部变量信息。这个选项比较少用。-g2
:生成足够多的调试信息,可以用GDB进行正常的程序调试,这个是默认选项。-g3
:在-g2
的基础上产生更多的信息,如宏定义。-Og
:一定程度的优化,但保证debug体验-s
:移除符号表和重定位信息