Linux编程参考资料——GCC编译器常用命令选项

GCC编译命令常用选项
选项 描述 命令示例
将源文件预处理、编译、汇编并链接形成可执行文件 [e.g.1]gcc source.c
未指定输出文件时默认输出为a.out
[e.g.2]gcc source.c -o exec
将源文件source.c链接为可执行文件exec
[e.g.3]gcc test.o -o test
将编译输出文件source.o链接为可执行文件exec
-E 仅作预处理并直接显示,不进行编译、汇编和链接 [e.g.1]gcc -E source.c -o preproc.i
将源文件source.c预处理结果输出到preproc.i文件
[e.g.2]gcc -E source.c > preproc.txt
将source.c预处理结果重定向到preproc.txt文件
注:”gcc -E”也可换为”cpp”(C preprocessor)
-S 预处理和编译到汇编语言(自动生成.s文件),不进行汇编和链接 [e.g.1]gcc -S source.c
将源文件source.c汇编成source.s文件
[e.g.2]gcc -S preproc.i
将预处理输出文件preproc.i汇编成preproc.s文件
-c 仅作预处理、编译和汇编并生成目标文件(与源文件同名但后缀为.o),不进行链接 [e.g.1]gcc -c source.s
将汇编输出文件source.s编译输出source.o文件
[e.g.2]gcc -c source.c -o target.o
编译源文件source.c并将目标文件更名为target.o
-g 产生带调试信息的编译后目标代码,供调试器(如gdb使用) 默认产生gdb所用的调试信息,可用-gformat指定要生成的调试信息格式以供其他平台其他调试器使用
[e.g.1]gcc -g source.c
将源文件编译为带调试信息的目标文件a.out
-o 指定输出文件的文件名 [e.g.1]gcc -o source.exe source.c
[e.g.2]gcc -o source.asm source.c
-s 剥除可执行文件中的符号表和重定位信息 用于减小可执行文件的大小
-C 预处理时不删除注释信息 配合-E选项使用
-O 使用编译优化级别1编译程序。O后还可附带其他的数值,表示不同的优化级别。级别越大优化效果越好,但编译时间越长 -O0:无优化(默认) 。
-O和-O1:优化可执行文件大小及执行时间,且不使编译时间明显增加。编译大型程序时会显著增加编译时内存的使用。
-O2:包含-O1的优化,并增加无需在目标文件大小和执行速度上进行折衷的优化。编译器不执行循环展开及函数内联,即不进行“空间换时间”的优化。该选项将增加编译时间和目标文件的执行性能。
-Os:执行所有不增加目标文件大小的-O2选项,并执行专门减小目标文件大小的优化选项。
-O3: 打开所有-O2优化选项并且增加 -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload和-ftree-vectorize优化选项。
[e.g.1]gcc -O1 source.c -o exec
-shared 生成共享目标文件 用于建立共享链接库
-w 禁止显示任何警告信息  
-Wall 显示全部警告信息  
-Wshadow 当局部变量遮盖另一局部变量或全局变量时发出警告 比较有用,建议打开。 -Wall不会打开该项
-Wpointer-arith 对函数指针或void *类型的指针进行算术操作时发出警告 比较有用,建议打开。 -Wall不会打开该项
-Werror 把警告当作错误 出现任何警告就停止
-Wunreachable-code 探测到永不执行的代码时发出警告 比较有用
-Wredundant-decls 同一可见域内某定义多次声明时发出警告 即使这些重复声明有效且毫无差别
-pedantic 对不符合 ANSI/ISO C标准且为标准所要求诊断之处发出警告 该选项可发现部分不符合ANSI/ISO C标准的代码,如C++ style comments are not allowed in ISO C90
-m 生成文件关联的信息,包含目标文件所依赖的所有源代码 [e.g.1]gcc -m source.c
与-m类似的有:
-mm忽略由#include 造成的依赖关系;
-md将输出导入到.d的文件里;
-mmd忽略由#include 造成的依赖关系,并将输出导入到.d的文件里
-v 显示链接过程中编译器调用的程序 gcc编译链接生成执行文件时,自动把该文件代码作为第一个模块链接在可执行程序中
--help 显示gcc帮助说明  
--target-help 显示目标机器特定命令行选项  
--version 显示gcc版本号和版权信息  

你可能感兴趣的:(linux编程工具,linux编程,GCC编译器,GCC选项)