GCC 常用编译选项说明

一、基础编译流程选项

选项 作用说明
-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位架构的代码

参考:

gcc嵌入式开发手册.pdf