(1).预处理:生成.i的文件[预处理器cpp]
(2).编译:将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]
(3).汇编:有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
(4).连接: 链接目标代码,生成可执行程序[链接器ld]
明确指出后面输入文件的语言为 language (而不是从文件名后缀得到的默认选择). 这个选项应用于后面
所有的输入文件,直到遇着下一个-x
选项. language 的可选值 有c
,objective-c
,c-header
,
c++
,cpp-output
,assembler
,和assembler-with-cpp
.
关闭任何对语种的明确说明,因此依据文件名后缀处理后面的文件(就象是从未使用过
-x
选项).如果只操作四个阶段(预处理,编译,汇编,连接)中的一部分,可以使用
-x
选项(或文件名后缀)告诉 gcc 从哪里开始,用-c
,-S
,或-E
选项告诉 gcc 到 哪里结束.
注意,某些选项组合(例如,-x cpp-output -E
)使 gcc 不作任何事情.
编译或汇编源文件,但是不作连接.编译器输出对应于源文件的目标文件.缺省情况下, GCC 通过用
.o
替换源文件名后缀.c
,.i
,.s
,等等,产生目标文件名.可以使用-o 选项选择其他名字.GCC 忽略-c 选项后面任何无法识别的输入文件(他们不需要编译或汇编).
编译后即停止,不进行汇编.对于每个输入的非汇编语言文件,输出文件是汇编语言文件.
缺省情况下, GCC 通过用
.o
替换源文件名后缀.c
,.i
,等等,产生 目标文件名.可以使用-o 选项选择其他名字.GCC 忽略任何不需要编译的输入文件.
预处理后即停止,不进行编译.预处理后的代码送往标准输出.
GCC 忽略任何不需要预处理的输入文件.
指定输出文件为 file.该选项不在乎 GCC 产生什么输出,无论是可执行文件,目标文件,汇编文件,还是预处理后的 C 代码.
由于只能指定一个输出文件,因此编译多个输入文件时,使用
-o
选项没有意义,除非输出一个可执行文件.
如果没有使用-o
选项,默认的输出结果是:可执行文件为a.out
,source.suffix
的目标文件是source.o
,汇编文件是source.s
,而预处理后的 C 源代码送往标准输出.
(在标准错误)显示执行编译阶段的命令.同时显示编译器驱动程序,预处理器,编译器的版本号.
在编译过程的不同阶段间使用管道而非临时文件进行通信.这个选项在某些系统上无法工作,因为那些系统的 汇编器不能从管道读取数据. GNU 的汇编器没有这个问题.
文件(FILE)格式 | 含义 |
---|---|
file.c |
C 源文件 |
file.h |
C 头文件(预处理文件) |
file.i |
预处理后的 C 源文件 |
file.C |
C++源文件 |
file.cc |
C++源文件 |
file.cxx |
C++源文件 |
file.m |
Objective-C 源文件 |
file.s |
汇编语言文件 |
file.o |
目标文件 |
a.out |
连接的输出文件 |
TMPDIR/cc* |
临时文件 |
LIBDIR/cpp |
预处理器 |
LIBDIR/cc1 |
C 编译器 |
LIBDIR/cc1plus |
C++编译器 |
LIBDIR/collect |
某些机器需要的连接器前端(front end)程序 |
LIBDIR/libgcc.a |
GCC 子例程(subroutine)库 |
/lib/crt[01n].o |
启动例程(start-up) |
LIBDIR/ccrt0 |
C++的附加启动例程 |
/lib/libc.a |
标准 C 库,另见 intro (3) |
/usr/include |
#include文件的标准目录 |
LIBDIR/include |
#include 文件的标准 gcc 目录 |
LIBDIR/g++-include |
#include 文件的附加 g++目录 |
LIBDIR |
通常为/usr/local/lib/machine/version. |
TMPDIR |
来自环境变量 TMPDIR (如果存在,缺省为/usr/tmp ,否则为 /tmp). |
参考资料: