gcc和g++描述

来源:互联网 发布:成都淘宝电商培训 编辑:程序博客网 时间:2024/06/10 04:36

C和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的语言,对编译器,后缀名控制着缺省设定:

gcc: (认为预处理后的文件(.i)是C文件,并且设定C形式的连接.)

g++: (认为预处理后的文件(.i)是C++文件,并且设定C++形式的连接.)  

==============================================================

源文件后缀名  指出语言种类    及      后期的操作:

.c             C源程序;                    预处理,编译,汇编

.C             C++源程序;               预处理,编译,汇编

.cc           C++源程序;               预处理,编译,汇编

.cxx         C++源程序;               预处理,编译,汇编

.m            Objective-C源程序;    预处理,编译,汇编

.i               预处理后的C文件;               编译,汇编

.ii              预处理后的C++文件;             编译,汇编

.s             汇编语言源程序;                      汇编

.S             汇编语言源程序;          预处理,      汇编

.h             预处理器文件;          通常不出现在命令行上

其他后缀名的文件被传递给连接器(linker).通常包括:

.o     目标文件(Object file)

.a     归档库文件(Archive file)                                     

==========================================================================

除非使用了-c, -S,或-E选项(或者编译错误阻止了完整的过程),否则连接总是最后的步骤.在连接阶段中,所有对应于源程序的.o文件,-l库文件,无法识别的文件名(包括指定的 .o目标文件和.a库文件)按命令行中的顺序传递给连接器.

-v

(在标准错误)显示执行编译阶段的命令.同时显示编译器驱动程序,预处理器,编译器的版本号.

-E

预处理后即停止,不进行编译.预处理后的代码送往标准输出(file.i).

GCC忽略任何不需要预处理的输入文件。

-S

编译后即停止,不进行汇编.对于每个输入的非汇编语言文件,输出文件是汇编语言文件(file.s).

缺省情况下, GCC通过用`.o'替换源文件名后缀`.c', `.i',等等,产生 目标文件名.可以使用-o选项选择其他名字.

GCC忽略任何不需要编译的输入文件.

-c

编译或汇编源文件,但不作连接.编译器输出对应源文件的目标文件(file.o).

缺省情况下, GCC通过用`.o'替换源文件名后缀`.c', `.i', `.s',等等,产生目标文件名.可以使用-o选项选择其他名字.

GCC忽略-c选项后面任何无法识别的输入文件(他们不需要编译或汇编).

-x language

明确指出后面输入文件的语言为language (而不是从文件名后缀得到的默认选择).这个选项应用于后面所有的输入文件,直到遇着下一个`-x'选项.language的可选值有`c', `objective-c', `c-header', `c++',`cpp-output', `assembler',和`assembler-with-cpp'.

-x none                                  (就象是从未使用过`-x'选项).

关闭任何对语种的明确说明,因此依据文件名后缀处理后面的文件

==============================================================

如果只操作四个阶段(预处理,编译,汇编,连接)中的一部分,可以使用`-x'选项(或文件名后缀)告诉gcc从哪里开始,用`-c', `-S',或`-E'选项告诉gcc到 哪里结束. 注意,某些选项组合(例如, `-x cpp-output -E')使gcc不作任何事情.

-o file

指定输出文件为file.该选项不在乎GCC产生什么输出,无论是可执行文件,目标文件,汇编文件还是 预处理后的C代码.

由于只能指定一个输出文件,因此编译多个输入文件时,使用`-o'选项没有意义,除非输出一个可执行文件.

如果没有使用`-o'选项,默认的输出结果是:可执行文件为`a.out', `source.suffix '的目标文件是`source.o',汇编文件是 `source.s',而预处理后的C源代码送往标准输出.

-pipe

在编译过程的不同阶段间使用管道而非临时文件进行通信.这个选项在某些系统上无法工作,因为那些系统的 汇编器不能从管道读取数据. GNU的汇编器没有这个问题.
0 0
原创粉丝点击