
一、基础编译流程选项
| 选项 | 作用说明 |
|---|---|
-E |
仅执行预处理 阶段,输出预处理后的文件(默认输出到终端,需用-o指定文件) |
-S |
执行"预处理+编译"阶段,输出汇编语言文件(后缀通常为.s) |
-c |
执行"预处理+编译+汇编"阶段,输出目标文件(后缀为.o) |
-o <file> |
指定输出文件的名称(如可执行文件、目标文件等) |
二、预处理选项
| 选项 | 作用说明 |
|---|---|
-D<宏名>[=值] |
定义预处理宏(如-DDEBUG启用调试宏,-DMAX_NUM=100定义带值的宏) |
-I<路径> |
指定头文件的搜索路径(优先搜索该路径下的头文件,如-I./include) |
-U<宏名> |
取消已定义的宏(覆盖之前的-D定义) |
-include <头文件> |
等价于在源文件开头写#include <头文件>(如-include stdio.h) |
三、调试选项
| 选项 | 作用说明 |
|---|---|
-g |
生成调试信息(默认兼容GDB,调试级别为"基本") |
-g3 |
生成更详细的调试信息(包含宏定义、注释等,适合深度调试) |
-ggdb |
生成GDB专用的调试信息(比-g更适配GDB) |
-fno-omit-frame-pointer |
保留栈帧指针(调试栈回溯时更准确,默认在优化级别高时会省略) |
四、优化选项
| 选项 | 作用说明 |
|---|---|
-O0 |
无优化(默认选项,编译速度快,适合调试) |
-O1 |
基础优化(优化代码大小和执行速度,不增加编译时间) |
-O2 |
中级优化(开启更多优化策略,如循环展开、函数内联,是生产环境常用选项) |
-O3 |
高级优化(在O2基础上增加更激进的优化,如向量优化,可能增加代码体积) |
-Os |
优化代码大小(适合嵌入式/存储空间有限的场景,效果接近O2但优先减小体积) |
-Ofast |
超激进优化(基于O3,忽略部分C/C++标准约束,适合对性能要求极高的场景) |
-ffast-math |
放松浮点数运算的标准约束(提升浮点性能,可能损失精度) |
五、链接选项
| 选项 | 作用说明 |
|---|---|
-l<库名> |
链接指定的库(如-lm链接数学库,-lpthread链接线程库) |
-L<路径> |
指定库文件的搜索路径(优先搜索该路径下的库,如-L./lib) |
-static |
强制静态链接(将库代码嵌入可执行文件,文件变大但不依赖系统库) |
-shared |
生成共享库文件 (配合-fPIC使用,输出后缀通常为.so) |
-fPIC |
生成位置无关代码(Position-Independent Code,是编译共享库的必要选项) |
-Wl,<链接器选项> |
将<链接器选项>传递给链接器(如-Wl,-rpath=./lib指定运行时库搜索路径) |
六、警告/错误选项
| 选项 | 作用说明 |
|---|---|
-Wall |
开启大部分常用警告(如未定义变量、类型不匹配等,建议默认开启) |
-Werror |
将所有警告视为编译错误(强制修复警告,避免潜在问题) |
-Wextra |
开启更多额外警告(比-Wall更严格,如未使用的函数参数) |
-Wpedantic |
严格遵循C/C++标准(禁止使用标准外的语法或扩展) |
-Wshadow |
警告"变量重定义覆盖(影子变量)"问题(如局部变量覆盖全局变量) |
七、其他常用选项
| 选项 | 作用说明 |
|---|---|
-std=<标准> |
指定C/C++语言标准(如-std=c99、-std=c++11、-std=c++20) |
-pthread |
开启多线程支持(等价于链接pthread库+启用线程相关编译选项) |
-fopenmp |
开启OpenMP多线程并行编程支持 |
-MM |
生成源文件的依赖关系(仅包含用户头文件,用于Makefile) |
-m32/-m64 |
强制生成32位/64位架构的代码 |