Linux 版 (精华区)

发信人: xian (我想用心来点亮希望), 信区: Linux
标  题: GNU CC 2.7.2解剖和移植(1) 
发信站: 紫 丁 香 (Sun May  2 15:52:13 1999), 转信


使用GNUCC

这一部分介绍如何运行,安装GNUC编译器,描述此编译器的新功能,
它与标准C的非兼容部分,给出使用此编译器涉及的各种控制选项,
提示当该编译器中存在的错误时应如何向GNU报告.
"GNUCC"是GNUCCompiler的全称,通常它指的是整个GNUC编译系统
并且特别指的是编译系统中与语言无关的部分.
GNUC编译器中集中了C,C++和Objective-C三个编译版本,该编译器
可以编译用C,C++和Objective-C书写的源程序.
GNUC编译器简称"GCC".GCC是本编译器的通用名字,也是在强调编译
C程序时用的名字.当强调编译的是C++程序时,通常称本编译器为
"G++".因为实际上只有一个编译器,因此无论所编译的源程序是上
述三种语言中的哪一种书写的,都可称本编译器为"GCC".
G++是一个编译器而不仅仅只是一个预处理器,G++直接由用户的
C++源程序建立目标代码而不是将C++源程序改写成此程序的中间
C版本.避免中间C版本意味着C++程序能具有更好的目标代码和更
好的调试信息.GNU调试器GDB可接收此目标代码中的有关信息并
提供给C++源程序级别的调试功能.
其他语言(如Ada9x,FORTRAN,Modula-3,PASCAL)的前端目前正在
开发中.这些前端类似于C++的前端,也建立在GNUCC的子目录中
并与之有链接关系.最终结果是形成一个集成化的编译系统,它
能够编译用C,C++和Objective-C编写的程序和其他任何已安装
了其前端的语言编写的程序.
我们将只介绍C,C++和Objective-C编译的各种选项.
GNUCC命令选项
当运行GNUCC时,其过程通常包括预处理(cpp),编译(cc1),汇编
(as)和链接(ld)等步骤."全局选项"允许你停止此过程于某一
步骤.例如:'-c'选项指出不要进行链接步骤.于是运行GNU
CC产生的输出文件则为汇编步骤产生的目标文件.
另外一些选项则被传送给上述过程中的某一步骤,一些选项用
于控制预处理器而另一些选项则控制编译器本身,还有一些选项
则用于控制汇编和链接.这些汇编和链接选项中的大部分都
未列在本手册中,因为一般几乎不需要用到它们.
GNUCC的大部分命令选项对C程序都是可用的,当一个选项仅仅
只能用于某一种语言(通常为C++)时,本手册将明显地指出.若
对一个具体选项的描述没有指明适应的源语言,则此选项可
用于所支持的所有语言.
Gcc程序将所有的选项和文件名统统作为参数接收,许多选项
具有多字母名字,因此,多个单字母选项不能归并为一个选项,
例如:'-dr'与'-d-r'是完全不同的形式.
可以将各种选项和其他参数混合在一起使用,大部分情况下,
其顺序并无影响,但当同时使用若干个相同类型的选项时,其
出现的顺序先后则有关系.例如:当指定'-L'选项多次时,将按指
定的顺序查询各个目录.
许多选项是以'-f'和'-W'打头的长名字选项,例
如:'-fforce-mem','-fsrength-reduce','-Wformat'等等.
这类选项大部分都有正反两种形式,例如:'-ffoo'的相反形式
是'-fno-foo'.本手册只描述两种形式中之一,即非缺省的那个
选项形式.

选项一览表

OverallOptions(全局选项)

-c-S-E-ofile-pipe-v-xlanguage

LanguageOptions(C语言选项)

-ansi-fallow-single-precision-fcond-mismatch

-fno-asm-fno-builtin-fsigned-bitfields-fsigned-char

-funsigned-bitfields-funsigned-char-fwritable-strings

-traditional-traditional-cpp-trigraphs

C++语言选项

-fall-virtual-fdollars-in-identifiers-felide-constructors

-fenum-int-equiv-fexternal-templates-ffor-scope

-fno-for-scope-fhandle-signatures

-fmemoize-lookups-fno-default-inline-fno-gnu-keywords

-fnonull-objects-foperator-names-fstrict-prototype

-fthis-is-variable-nostdinc++-traditional+en

WarningOptions(警告信息选项)

-fsyntax-only-pedantic-pedantic-errors-w-W-Wall

-Waggregate-return_Wbad-function-cast-Wcast-align-Wcast-qual

-Wchar-subscript-Wcomment-Wconversion-Wenum-clash

-Werror-Wformat-Wid-clash-len-Wimplicit-Wimport-Winline

-Wimplicit-int-Wimplicit-function-declaration-Winline-Wlarger-than-len

-Wmain-Wmissing-prototypes-Wmissing-declarations

-Wnested-externs-Wno-import-Woverloaded-virtual-Wparentheses

-Wpointer-arith-Wredundant-decls-Wreorder-Wreturn-type

-Wshadow-Wstrict-prototypes-Wswitch-Wsynth

-Wtemplate-debugging-Wtraditional-Wtrigraphs

-Wuninitialized-Wunused-Wwrite-strings

DebuggingOptions(调试选项)

-a-dletters-fpretend-float-g-glevel-gcoff-gxcoff

-gxcoff+-gdwarf-gdwarf+-gstabs-gstabs+-ggdb-p-pg

-save-temps-print-file-name=library-print-search-dirs

-print-libgcc-file-name-print-prog-name=program

OptimizationOptions(优化选项)

-fcaller-saves-fcse-follow-jumps-fcse-skip-blocks

-fdelayed-branch-fexpensive-optimizations-ffast-math-ffloat-store

-fforce-addr-fforce-mem-finline-functions-fkeep-inline-functions

-fno-default-inline-fno-defer-pop-fno-function-cse

-fno-inline-fno-peephole-fomit-frame-pointer

-frerun-cse-after-loop-fschedule-insns

-fschedule-insns2-fstrength-reduce-fthread-jumps

-funroll-all-loops-funroll-loops-O-O0-O1-O2-O3

PreprocessorOptions(预处理选项)

-Aassertion(answer)-C-dD-dM-dN-Dmacro[=defn]-E-H

-idirafterdir-includefile-imacrosfile-iprefixprefix

-iwithprefixdir-iwithprefixbeforedir-isystemdir-M-MD

-MM-MMD-MG-nostdinc-P-trigraphs-undef

-Umacro-Wp,option

AssemblerOption(汇编选项)

-Wa,option

LinkerOptions(链接选项)

Object-file-name-llibrary-nostartfiles-nodefaultlibs-nostdlib-s

-static-shared-symbolic-Xlinkeroption-Wl,option-usymbol

DirectoryOptions(目录选项)

-Bprefix-Idir-I--Ldir

TargetOptions(目标机和版本选项)

-bmachine-Vversion

ConfigurationDependentOptions(机器相关选项)

M680x0Options(M680x0选项)

-m68000-m68020-m68020-40-m68030-m68040-m68881

-mbitfield-mc68000-mc68020-mfpa-mnobitfield-mrtd

-mshort-msoft-float

VAXOptions(VAX选项)

-mg-mgnu-munix

SPARCOptions(SPARC选项)

-mepilogue-mfpu-mhard-float-mno-fpu-mno-epilogue

-msoft-float-msparclite-mv8-msupersparc-mcypress

ConvexOptions(Convex选项)

-margcount-mc1-mc2-mnoargcount

AMD29KOptions(AMD29K选项)

-m29000-m29050-mbw-mdw-mkernel-registers-mlarge

-mnbw-mnodw-msmall-mstack-check-muser-registers

M88KOptions(M88K选项)

-m88000-m88100-m88110-mbig-pic-mcheck-zero-division

-mhandle-large-shift-midentify-revision

-mno-check-zero-division-mno-ocs-debug-info

-mno-ocs-frame-position-mno-optimize-arg-area

-mno-serialize-volatile-mno-underscores

-mocs-debug-info-mocs-frame-position

-moptimize-arg-area-mserialize-volatile

-mshort-data-num-msvr3-msvr4-mtrap-large-shift

-muse-div-instruction-mversion-03.00

-mwarn-passed-structs

RS6000Options(RS6000和PowerPC选项)

-mfp-in-toc-mno-fop-in-toc

RTOptions(RT选项)

-mcall-lib-mul-mfp-arg-in-fpregs-mfp-arg-in-gregs

-mfull-fp-blocks-mhc-struct-return-min-line-mul

-mminimum-fp-blocks-mnohc-struct-return

MIPSOptions(MIPS选项)

-mabicalls-mcpu=cputype-mips2-mips3-mint64-mlong64

-mlonglong128-mmips-as-mgas-mrnames-mno-rnames

-mgpopt-mno-gpopt-mstats-mno-stats-mmemcpy

-mno-memcpy-mno-mips-tfile-mmips-tfile-msoft-float

-mhard-float-mabicalls-mno-abicalls-mhalf-pic

-mno-half-pic-Gnum-nocpp

i386Options(i386选项)

-m486-m386-mieee-fp-mno-fancy-math-387

-msoft-float-mno-fp-ret-in-387-msvr3-shlib

HPPAOptions(HPPA选项)

-mpa-risc-1-0-mpa-risc-1-1-mkernel-mshared-libs

-mno-shared-libs-mlong-calls-mdisable-fpregs

-mdisable-indexing-mtrailing-colon

i960Options(Intel960选项)

-mcputype-mnumerics-msoft-float-mleaf-procedures

-mno-leaf-procedures-mtail-call-mno-tail-call

-mcomplex-addr-mno-complex-addr-mcode-align

-mno-code-align-mic-compat-mic2.0-compat

-mic3.0-compat-masm-compat-mintel-asm-mstrict-align

-mno-strict-align-mold-align-mno-old-align

DECAlphaOptions(DECAlpha选项)

-mfp-regs-mno-fp-regs-mno-soft-float-msoft-float

SystemVOptions(SYSV选项)

-Qy-Qn-Qn-YP,paths-Ym,dir

Clipper选项

-mc300-mc400

H8/300选项

-mrelax-mh

ARM选项

-mapcs-m2-m3-m6-mbsd-mxopen-mno-symrename

CodeGenerationOptions(代码生成选项)

-fcall-saved-reg-fcall-used-reg-ffixed-reg

-finhibit-size-directive-fnonnull-objects-fno-common

-fno-ident-fno-gnu-linker-fpcc-struct-return-fpic

-fPIC-freg-struct-return-fshared-data-fshort-enums

-fshort-double-fvolatile-fvolatile-global

-fverbose-asm

选项说明

全局选项

编译过程按顺序一般有预处理,编译,汇编和链接四个步骤.前三个步骤
作用于各类特定的源文件,并最终生成目标文件;最后一个步骤则将所有
目标文件(那些由编译新生成的目标文件以及那些作为输入文件指定的
目标文件)连接装配成一个可执行文件.

对给定的输入文件,文件名后缀决定了源文件的类型以及编译过程必须
经历的步骤:
file.cC源代码,必须经过预处理
file.iC源代码,不需经过预处理
file.iiC++源代码,不需经过预处理
file.mObjective-C源代码,注意,为了运行objective-C程序,必须连接'libobjc.a'库
file.h未经过编译或连接的C头文件
file.cxx
file.cpp
file.CC++源代码,必须经过预处理,注意,'cxx'中的'x'均是字母x.'.C'中的C为大写字母C.

File.s汇编源代码,不经过预处理和编译
File.S汇编源代码,必须预处理
Other直接进行链接的目标文件,任何非上述后缀的文件名都被认为属于此类目标文件
可以用'-x'选项明确地指出输入文件是何种语言

-xlanguage

指明输入文件的语言(而不是由编译根据文件名后缀确定其语言),这一选项

作用于其后的所有输入文件直至遇到下一个'-x'选项为止

language可选的值为:

cobjective-cc++c-headercpp-outputassemblerassembler-with-cpp

-xnone

关闭已指明的语言,使其后出现的文件根据文件名后缀确定其语言(就好象

`-x'从未使用过一样).

如果只需进行编译过程中的某一个或某几个步骤,可以使用'-x'选项(或文件名

后缀原则)告知gcc从哪一个步骤开始编译,而'-c','-S'或'-E'选项则用来告知gcc

停止于哪一个步骤之后.注意,对某些组合(如'-xcpp-output-E'),gcc将不做

任何事情.

-c对源文件进行编译或汇编,但不链接.仅仅不进行链接步骤,最后的输出文件类

型是每个源文件的目标文件.每一种源文件的缺省目标文件名是用后缀

'.o'代替源文件名的后缀".c",".i",".s".忽略不经过编译或汇编的不可识别的输

入文件.

-S停止于编译步骤之后,不进行汇编步骤,最后的输出文件类型为汇编源代码文

件.

-E停止于预处理之后,不进行编译步骤,最后的输出文件类型为经过预处理之

后的源代码文件.此文件被输出至标准输出文件.

-ofile放置输出文件file中,它适用于所有类型的输出文件,即,可以是可执行文件,

目标文件,汇编文件或经预处理之后的源代码文件.

因为'-o'选项只能指明一个文件,所以,使用'-o'选项对于编译多个输入文件的

情形将无意义,除非你要生成的输出文件是可执行文件,若未指明'-o',缺省约

定是:将可执行文件放置在a.out中;若输入源文件为source.suffix,则目标文

件放置在source.o中,汇编文件放置在source.s中;而所有预处理后的C源

代码则输出至标准输出文件

-v显示运行编译过程所执行的各个编译步骤命令,同时显示编译驱绦?预处

理器以及编译器的版本号.

-pipe在编译各步骤之间用管道而不是用临时文件进行通讯,这一选项在那些其编

译器不能从管道输入的系统中无效,GNU汇编无此问题.

admin@studio.openunix.org


--
※ 修改:.netiscpu 于 May  2 16:10:14 修改本文.[FROM: dns.mtlab.hit.ed]
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.239.115]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.755毫秒