gcc 常用选项整理

-c

编译生成目标文件(Relocatable)。

举个例子,

$ gcc main.c -o main

等价于

$ gcc -S main.c
$ gcc -c main.s
$ gcc main.o

按:-S 选项生成汇编代码,-c 选项生成目标文件,最后一步是链接。

-Dmacro[=defn]

定义一个宏。

例如:

-DMACHINE=8086,这个和在 C 语言中使用 #define MACHINE 8086 是一样的。

-E

只做预处理而不编译,cpp 命令也可以达到同样的效果。

-g

在生成的目标文件中添加调试信息,所谓调试信息就是源代码和指令之间的对应关系,在 gdb 调试和 objdump 反汇编时要用到这些信息。

按:在编译时要加上 -g 选项,生成的目标文件才能用 gdb 进行调试。

-Idir

dir 是头文件所在的目录。

例如,一个目录:

$ tree
.
|-- main.c
`-- stack 
    |-- stack.c 
    `-- stack.h
    
1 directory, 3 files

我们需要使用 gcc -c main.c -Istack 编译。用 -I 选项告诉 gcc 头文件要到子目录 stack 里找。

按:在 #include 预处理指示中可以使用相对路径,如果我们在代码中使用 #include "stack/stack.h",那么编译时就不需要加 -Istack 选项了。

-Ldir

dir 是库文件所在的目录。

例如:

$ gcc main.c -L. -lstack -Istack -o main

-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》(宋劲杉)


gcc 常用选项整理
http://fanyfull.github.io/2021/11/29/gcc-常用选项整理/
作者
Fany Full
发布于
2021年11月29日
许可协议