1、关于输出信息的
--version 显示 gcc 版本号和版权信息
--help /--target-help 显示 gcc 帮助说明。‘target-help’是显示目标机器特定的命令行选项。
-v 打印较多信息,显示编译器调用的程序。
2、关于编译链接选项
-E 仅作预处理,不进行编译、汇编和链接 输出.i文件
-S 仅编译到汇编语言,不进行汇编和链接 输出.S 文件
-c 编译、汇编到目标代码,不进行链接 输出.o文件
-l library 链接时搜索名为library的库。例子: $ gcc test.c -lm -o test
-I dir 把dir加入到搜索头文件的路径列表中。 $ gcc test.c -I../inc -o test
LD_LIBRARY_PATH: 这个环境变量指示动态连接器可以装载动态库的路径。
-fPIC 表示编译为位置独立的代码
-L dir 把dir加入到搜索库文件的路径列表中。gcc -I/home/foo -L/home/foo -ltest test.c -o test
-D name 预定义一个名为name的宏,值为1。 $ gcc -DTEST_CONFIG test.c -o test
-D name =definition 预定义一个名为name值为definition的宏。。 $ gcc -DTEST_CONFIG test.c -o test
-ggdb level 为调试器 gdb 生成调试信息。level可以为1,2,3,默认值为2。
-s 去除可执行文件中的符号表和重定位信息。用于减小可执行文件的大小。
-C 告诉预处理器不要丢弃注释。配合`-E'选项使用。$ gcc test.c --C -o test
-static 在支持动态链接的系统上,阻止连接共享库。
-shared 该选项指定生成动态连接库
-nostdlib 不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。
3、关于警告信息的
-Wall 会打开一些很有用的警告选项,建议编译时加此选项。
-w 禁止显示所有警告信息。
-Wpointer-arith 对函数指针或者void *类型的指针进行算术操作时给出警告。 -Wall 并不会打开此项。
-Wcast-qual 当强制转化丢掉了类型修饰符时给出警告。 -Wall 并不会打开此项
-Waggregate-return 如果定义或调用了返回结构体或联合体的函数,编译器就发出警告。
-Winline 无论是声明为 inline 或者是指定了-finline-functions 选项,如果某函数不能内联,编译器都将发出警告。如果你的代码含有很多 inline 函数的话,这是很有用的选项。
-Werror 把警告当作错误。出现任何警告就放弃编译。
-Wunreachable-code 如果编译器探测到永远不会执行到的代码,就给出警告。也是比较有用的选项。
-Wcast-align 一旦某个指针类型强制转换导致目标所需的地址对齐增加时,编译器就发出警告。
-Wundef 当一个没有定义的符号出现在 #if 中时,给出警告。
-Wredundant-decls 如果在同一个可见域内某定义多次声明,编译器就发出警告,即使这些重复声明有效并且毫无差别。
4、关于编译优化的
-O0 禁止编译器进行优化。默认为此项。
-O1 尝试优化编译时间和可执行文件大小。
-O2 更多的优化,会尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法。
-O3 在 -O2 的基础上再打开一些优化选项:-finline-functions, -funswitch-loops 和 -fgcse-after-reload
-finline-functions 把所有简单的函数内联进调用者。编译器会探索式地决定哪些函数足够简单,值得做这种内联。
-fstrict-aliasing 施加最强的别名规则(aliasing rules)。
5、编译标准的选择
-ansi 支持符合ANSI标准的C程序。这样就会关闭GNU C中某些不兼容ANSI C的特性。
-std=c89 指明使用标准 ISO C90 作为标准来编译程序。
-std=c99 指明使用标准 ISO C99 作为标准来编译程序。
-std=c++98 指明使用标准 C++98 作为标准来编译程序。
-std=gnu9x 使用 ISO C99 再加上 GNU 的一些扩展。
-fgnu89-inline 告诉编译器在 C99 模式下看到 inline 函数时使用传统的 GNU 句法。
-fno-asm 不把asm, inline或typeof当作关键字,因此这些词可以用做标识符。用 __asm__, __inline__和__typeof__能够替代它们。 `-ansi' 隐含声明了`-fno-asm'。
6、关于机器的依赖
-mtune=cpu-type 为指定类型的 CPU 生成代码。cpu-type可以是:i386,i486,i586,pentium,i686,pentium4 等等。
-msse
-msse2
-mmmx
-mno-sse
-mno-sse2
-mno-mmx
-m32 生成32位机器上的代码。
-m64 生成64位机器上的代码。
-mpush-args (不)使用 push 指令来进行存储参数。默认是使用
-mno-push-args
-mregparm=num 当传递整数参数时,控制所使用寄存器的个数。
网友评论