(利用GCC生成可执行文件的处理过程大致为:GCC需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入"#include"语句所包含的内容;接着,GCC会调用as将处理后的源代码编译成目标代码;最后,GCC会调用链接程序ld,把生成的目标代码链接成一个可执行程序。)
-E
使用-E选项可以让GCC停止在预处理完成阶段(完成所有#define,#if,#include等替换),输出到标准输出,除非指定-o选项,gcc不再做更多的处理。可使用-o选项生成一个以i结尾的文件(GCC默认将.i文件看成是预处理后的C语言源代码)
-S
停止在汇编阶段,输出.s(汇编语言源码)但不调用as
停止在汇编阶段,输出.s(汇编语言源码)但不调用as
-c
停止在连接阶段,输出.o但不调用ld
停止在连接阶段,输出.o但不调用ld
-o FILE
指定输出文件名。-o选项不是产生可执行二进制代码的关键选项,它只是为gcc的输出给出一个文件名
指定输出文件名。-o选项不是产生可执行二进制代码的关键选项,它只是为gcc的输出给出一个文件名
-DFOO=BAR
在命令行定义预处理宏FOO,其值为BAR
在命令行定义预处理宏FOO,其值为BAR
-IDIRNAME
将DIRNAME加入到头文件的搜索目录列表中
将DIRNAME加入到头文件的搜索目录列表中
-LDIRNAME
将DIRNAME加入到库文件的搜索目录列表中,缺省情况下gcc 只链接共享库
将DIRNAME加入到库文件的搜索目录列表中,缺省情况下gcc 只链接共享库
-static
链接静态库,即执行静态链接,默认情况下,GCC在链接时优先使用动态链接库
链接静态库,即执行静态链接,默认情况下,GCC在链接时优先使用动态链接库
-lFOO
链接名为libFOO的函数库
链接名为libFOO的函数库
-g
GCC在产生调试符号时,同样采用了分级的思路,开发人员可以通过在-g选项后附加数字1、2或3来指定在代码中加入调试信息 的多少。默认的级别是2(-g2),此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。级别3(-g3)包含级别2中的所有调试信息,以及源代码中定义的宏。级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储之用。回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段
GCC在产生调试符号时,同样采用了分级的思路,开发人员可以通过在-g选项后附加数字1、2或3来指定在代码中加入调试信息 的多少。默认的级别是2(-g2),此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。级别3(-g3)包含级别2中的所有调试信息,以及源代码中定义的宏。级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储之用。回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段
-ggdb
在可执行程序中包含只有GNU debugger才能使别的达两条是信息
在可执行程序中包含只有GNU debugger才能使别的达两条是信息
-On(n=1,2,3)
使用编译选项-On来控制优化代码的生成,其中n是一个代表优化级别的整数。通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。在linux下一般使用-O2选项,因为它在优化长度、编译时间和代码大小之间,取得了一个比较理想的平衡点
使用编译选项-On来控制优化代码的生成,其中n是一个代表优化级别的整数。通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。在linux下一般使用-O2选项,因为它在优化长度、编译时间和代码大小之间,取得了一个比较理想的平衡点
-ansi
支持ANSI/ISO C的标准语法,取消GNU的语法扩展中与该标准有冲突的部分
(但这一选项并不能保证生成ANSI兼容的代码)
支持ANSI/ISO C的标准语法,取消GNU的语法扩展中与该标准有冲突的部分
(但这一选项并不能保证生成ANSI兼容的代码)
-pedantic
允许发出ANSI/ISO C标准所列出的所有警告
允许发出ANSI/ISO C标准所列出的所有警告
-pedantic -errors
允许发出ANSI/ISO C标准所列出的所有错误
允许发出ANSI/ISO C标准所列出的所有错误
-traditional
支持Kernighan & Ritchie C语法(如用旧式语法定义函数)
-w
关闭所有警告,建议不要使用此项
关闭所有警告,建议不要使用此项
-Wall
允许发出gcc能提供的所有有用的警告,也可以用-W(warning)来标记指定的警告
允许发出gcc能提供的所有有用的警告,也可以用-W(warning)来标记指定的警告
-werror
把所有警告转换为错误,以在警告发生时中止编译程
把所有警告转换为错误,以在警告发生时中止编译程
-MM
输出一个make兼容的相关列表
输出一个make兼容的相关列表
-x language
指定编程语言language,如C,C++,Java,Ada,F77,Assembler等
指定编程语言language,如C,C++,Java,Ada,F77,Assembler等
-v
显示在编译过程的每一步中用到的命令
显示在编译过程的每一步中用到的命令
更详细内容,请参见man gcc.