gcc
GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以GPL 及LGPL 许可证所发行的自由软件,也是GNU计划 的关键部分,亦是自由的类Unix 及苹果计算机 Mac OS X操作系统的标准编译器。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。
例子
gcc -I/home/foo -L/home/foo -lpthread -DTEST_CONFIG=1 test.c -o test
常用选项
-o outfile
输出到指定的文件
-x language
指定使用的编程语言。允许的语言包括:C、C++、assember、none。‘none’意味着恢复默认行为,即根据文件的扩展名猜测源文件的语言。
-v
打印较多信息,显示编译器调用的程序
-E
仅作预处理
-S
仅编译到汇编语言
-c
编译、汇编到目标代码
-I library
-Ilibrary
添加链接时需要的library库
-Idir
把dir加入到搜索头文件的路径列表中
-Ldir
把dir加入到搜索库文件的路径列表中
-Dname
预定义一个名为name的宏
-Dname=definition
预定义一个名为name值为definition的宏
-ggdb
-ggdblevel
为gdb生成调试信息。level默认为2,可以选择为1,2,3
-g
-gleve
生成操作系统本地格式的调试信息。-g会生成-ggdb之外的信息。level默认为2,可以选择为1,2,3
-s
去处可执行文件中的符号表和重定位信息,可减少可执行文件的大小
-static
在支持动态链接的系统上,阻止连接共享库。
-shared
生成动态链接库时使用
-fPIC
生成位置无关代码
-Wall
打开一些有用的警告信息
-W
-Wextra
打印一些额外的警告信息
-w
禁止显示所有的警告信息
-Wshadow
当一个局部变量遮盖了另一个局部变量或者全局变量时,给出警告。-Wall并不会给出这样的警告。
-Wpointer-arith
对函数指针或者void * 类型的指针进行算术操作时给出警告。-Wall并不会给出这样的警告。
-Winline
当声明为inline或者执行了-finline-functions选项,而该函数不能为内联时,编译器将发出警告。
-Wunreachable-code
如果编译器探测到永远不会执行到的代码,就给出警告。
-Wstrict-prototypes
如果函数的声明或定义没有指出参数类型,编译器就发出警告。
-O0
禁止编译器进行优化。默认为此项。
-O
-O1
尝试优化编译时间和可执行文件大小。
-O2
更多的优化,会尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法。
-O3
在 -O2 的基础上再打开一些优化选项:-finline-functions, -funswitch-loops 和 -fgcse-after-reload 。
-Os
对生成文件大小进行优化。它会打开 -O2 开的全部选项,除了会那些增加文件大小的。
-finline-functions
把所有简单的函数内联进调用者。编译器会探索式地决定哪些函数足够简单,值得做这种内联。
-fstrict-aliasing
施加最强的别名规则(aliasing rules)。