gcc 常用选项整理
-c
编译生成目标文件(Relocatable)。
举个例子,
等价于
按:-S
选项生成汇编代码,-c
选项生成目标文件,最后一步是链接。
-Dmacro[=defn]
定义一个宏。
例如:
-DMACHINE=8086
,这个和在 C 语言中使用
#define MACHINE 8086
是一样的。
-E
只做预处理而不编译,cpp
命令也可以达到同样的效果。
-g
在生成的目标文件中添加调试信息,所谓调试信息就是源代码和指令之间的对应关系,在 gdb 调试和 objdump 反汇编时要用到这些信息。
按:在编译时要加上 -g
选项,生成的目标文件才能用 gdb
进行调试。
-Idir
dir 是头文件所在的目录。
例如,一个目录:
我们需要使用 gcc -c main.c -Istack
编译。用
-I
选项告诉 gcc 头文件要到子目录 stack 里找。
按:在 #include
预处理指示中可以使用相对路径,如果我们在代码中使用
#include "stack/stack.h"
,那么编译时就不需要加
-Istack
选项了。
-Ldir
dir 是库文件所在的目录。
例如:
-L.
表示在当前目录找。-lstack
告诉编译器要链接 libstack 库。
-M
和-MM
输出 ".o文件:.c文件 .h文件"
这种形式的 Makefile
规则,-MM
的输出不包括系统头文件。
按:暂时不去深究。
-o outfile
outfile 是输出文件的文件名。
-O?
各种编译优化的选项。
-print-search-dirs
打印库文件的默认搜索路径。
-S
编译生成汇编代码。
-v
打印详细的编译链接过程。
-Wall
打印所有的警告信息。
-Wl,optinos
按:小写字母 l
。
options 是传递给链接器的选项。
举例:
参考:
1、《Linux C》(宋劲杉)