部分GCC选项
-Werror 和 -I 很有用
命令 | 描述 |
-l library-llibrary |
进行链接时搜索名为library的库。例子: $ gcc test.c -lm -o test |
-Idir |
把dir加入到搜索头文件的路径列表中。例子: $ gcc test.c -I../inc -o test |
-Ldir |
把dir加入到搜索库文件的路径列表中。例子: $ gcc -I/home/foo -L/home/foo -ltest test.c -o test |
-Dname |
预定义一个名为name的宏,值为1。例子: $ gcc -DTEST_CONFIG test.c -o test |
-Dname=definition |
预定义名为name,值为definition的宏。 |
-ggdb -ggdblevel |
为调试器 gdb 生成调试信息。level可以为1,2,3,默认值为2。 |
-g -glevel |
生成操作系统本地格式的调试信息。-g 和 -ggdb 并不太相同, -g 会生成 gdb 之外的信息。level取值同上。 |
-s |
去除可执行文件中的符号表和重定位信息。用于减小可执行文件的大小。 |
-M |
告诉预处理器输出一个适合make的规则,用于描述各目标文件的依赖关系。对于每个 源文件,预处理器输出 一个make规则,该规则的目标项(target)是源文件对应的目标文件名,依赖项(dependency)是源文件中 #include引用的所有文件。生成的规则可 以是单行,但如果太长,就用`/'-换行符续成多行。规则 显示在标准输出,不产生预处理过的C程序。 |
-C |
告诉预处理器不要丢弃注释。配合`-E'选项使用。 |
-P |
告诉预处理器不要产生`#line'命令。配合`-E'选项使用。 |
-static |
在支持动态链接的系统上,阻止连接共享库。该选项在其它系统上 无效。 |
-nostdlib |
不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。 |
Warnings | |
-Wall |
会打开一些很有用的警告选项,建议编译时加此选项。 |
-W -Wextra |
打印一些额外的警告信息。 |
-w |
禁止显示所有警告信息。 |
-Wshadow |
当一个局部变量遮盖住了另一个局部变量,或者全局变量时,给出警告。很有用的选项,建议打开。 -Wall 并不会打开此项。 |
-Wpointer-arith |
对函数指针或者void *类型的指针进行算术操作时给出警告。也很有用。 -Wall 并不会打开此项。 |
-Wcast-qual |
当强制转化丢掉了类型修饰符时给出警告。 -Wall 并不会打开此项。 |
-Waggregate-return |
如果定义或调用了返回结构体或联合体的函数,编译器就发出警告。 |
-Winline |
无论是声明为 inline 或者是指定了-finline-functions 选项,如果某函数不能内联,编译器都将发出警告。如果你的代码含有很多 inline 函数的话,这是很有用的选项。 |
-Werror |
把警告当作错误。出现任何警告就放弃编译。 |
-Wunreachable-code |
如果编译器探测到永远不会执行到的代码,就给出警告。也是比较有用的选项。 |
-Wcast-align |
一旦某个指针类型强制转换导致目标所需的地址对齐增加时,编译器就发出警告。 |
-Wundef |
当一个没有定义的符号出现在 #if 中时,给出警告。 |
-Wredundant-decls |
如果在同一个可见域内某定义多次声明,编译器就发出警告,即使这些重复声明有效并且毫无差别。 |