分类:
2009-05-17 21:34:56
编译器在编译过程中,先将程式码编译成 object 档,然後再和程式库联结,成为可执行文档。故一个编译器须提供的参数主要有几类:
1.指定编译器编出的object 档或是可执行档档名。
2.在编译过程做最佳化,可提升程式的执行速度。
3.设定搜寻程式库的标头档 (header file) 及程式库档的目录及指定程式库档档名。
提供进一步的资讯以便使用者找寻程式中的错误。
以下便以这四个大类分别介绍。
注意:下面在不同类别中所介绍的参数,几乎都可以混合著使用。
1.设定编译出的 object 档档名或是可执行档档名:
参数: -o out_put_filename
说明: 指定编译出的档名为 out_put_filename。
范例: 本例将程式码 'test.c' 编译成可执行档,并设定档名为 'test'。
gcc test.c -o test
2.在编译过程做最佳化
参数: -O
说明: 在编译过程做最佳化,以提升增快程式执行速度。
范例: 本例将程式码 'test.c' 编译成可执行档 'test',并在编译过程做最佳化'。
gcc -O test.c -o test
3.设定搜寻标头档目录、程式库档的目录及指定程式库档。
3.1设定搜寻标头档目录
参数: -Idir_name
说明: 将目录 'dir_name' 设定为搜寻标头档目录之一。
3.2设定搜寻程式库目录。
参数: -Ldir_name
说明: 将目录 'dir_name' 设定为搜寻程式库目录之一。
3.3设定程式库档案。
参数: -lname
说明: 联结程式库 libname.a 。
范例一:本例中假设你的程式档名为test.c,数学函数如 sin等,所要联结的程式库为 libm.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
范例二:本例中假设你的程式档名为 test.c,使用到 X window 函数,所需的 include 档放在 /usr/X11R6/include 中,所须联结的程式库放在 /usr/X11R6/lib,所要联结的程式库为 libX11.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
提供进一步的资讯以便使用者找寻程式中的错误。
参数: -Wall
说明: 输出较多的警告讯息,以便找出程式的错误。
范例: 编译 test.c 时输出较多的警告讯息。
gcc -Wall test.c
参数: -g
说明: 在编译出可执行档时,附加执行时除错资讯,以供 gdb 读取 (若要使用 ABSoft 的除错程式,则须将参数改为 -gdwarf )。
范例: 将 'test.c' 编译成可执行档 'test',并附加除错资讯。
gcc -g test.c -o test
进阶参数
1. 仅编译成 object 档。
参数: -c
说明: 仅编译成 object 档而不进行程式库联结。
范例: 将 test.c 编译成 object 档 test.o。
gcc -c test.c -o test.o
2. 联结数个 object 成可执行档。
范例: 将 'test1.o'、'test2.o' 和程式库联结後成为可执行档 test。
gcc test1.o test2.o -o test
3. 观察宏展开情形:
参数: -E
说明:展开程式中的宏以便了解巨集是否依照预期方式展开。
范例:将 test1.c 中的宏展开後储存到 test1.c.ext 。
gcc -E test1.c > test1.c.ext
4. 产生组合语言程式码:
参数: -S
范例:编译 test.c 产生对应的组合语言程式码档 test.s。
gcc -S test.c -o test.s
GCC(1) GNU Tools GCC(1)
NAME
gcc, g++ - GNU project C and C++ Compiler (v2.7)
SYNOPSIS
gcc [ option | filename ]...
g++ [ option | filename ]...
WARNING
The information in this man page is an extract from the
full documentation of the GNU C compiler, and is limited
to the meaning of the options.
This man page is not kept up to date except when volun-
teers want to maintain it. If you find a discrepancy
between the man page and the software, please check the
Info file, which is the authoritative documentation.
If we find that the things in this man page that are out
of date cause significant confusion or complaints, we will
stop distributing the man page. The alternative, updating
the man page when we update the Info file, is impossible
because the rest of the work of maintaining GNU CC leaves
us no time for that. The GNU project regards man pages as
obsolete and should not let them take time away from other
things.
For complete and current documentation, refer to the Info
file `gcc' or the manual Using and Porting GNU CC (for
version 2.0). Both are made from the Texinfo source file
gcc.texinfo.
DESCRIPTION
The C and C++ compilers are integrated. Both process
input files through one or more of four stages: prepro-
cessing, compilation, assembly, and linking. Source file-
name suffixes identify the source language, but which name
you use for the compiler governs default assumptions:
gcc assumes preprocessed (.i) files are C and assumes C
style linking.
g++ assumes preprocessed (.i) files are C++ and assumes
C++ style linking.
Suffixes of source file names indicate the language and
kind of processing to be done:
.c C source; preprocess, compile, assemble
.C C++ source; preprocess, compile, assemble
.cc C++ source; preprocess, compile, assemble
.cxx C++ source; preprocess, compile, assemble
.m Objective-C source; preprocess, compile, assemble
.i preprocessed C; compile, assemble
.ii preprocessed C++; compile, assemble
GNU Tools 1993/10/13 1
GCC(1) GNU Tools GCC(1)
.s Assembler source; assemble
.S Assembler source; preprocess, assemble
.h Preprocessor file; not usually named on command line
Files with other suffixes are passed to the linker. Com-
mon cases include:
.o Object file
.a Archive file
Linking is always the last stage unless you use one of the
-c, -S, or -E options to avoid it (or unless compilation
errors stop the whole process). For the link stage, all
.o files corresponding to source files, -l libraries,
unrecognized filenames (including named .o object files
and .a archives) are passed to the linker in command-line
order.
OPTIONS
Options must be separate: `-dr' is quite different from
`-d -r '.
Most `-f' and `-W' options have two contrary forms: -fname
and -fno-name (or -Wname and -Wno-name). Only the non-
default forms are shown here.
Here is a summary of all the options, grouped by type.
Explanations are in the following sections.
Overall Options
-c -S -E -o file -pipe -v -x language
Language Options
-ansi -fall-virtual -fcond-mismatch
-fdollars-in-identifiers -fenum-int-equiv
-fexternal-templates -fno-asm -fno-builtin
-fno-strict-prototype -fsigned-bitfields
-fsigned-char -fthis-is-variable
-funsigned-bitfields -funsigned-char
-fwritable-strings -traditional -traditional-cpp
-trigraphs
Warning Options
-fsyntax-only -pedantic -pedantic-errors -w -W
-Wall -Waggregate-return -Wcast-align -Wcast-qual
-Wchar-subscript -Wcomment -Wconversion
-Wenum-clash -Werror -Wformat -Wid-clash-len
-Wimplicit -Winline -Wmissing-prototypes
-Wmissing-declarations -Wnested-externs -Wno-import
-Wparentheses -Wpointer-arith -Wredundant-decls
-Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
-Wtemplate-debugging -Wtraditional -Wtrigraphs
-Wuninitialized -Wunused -Wwrite-strings
GNU Tools 1993/10/13 2
GCC(1) GNU Tools GCC(1)
Debugging Options
-a -dletters -fpretend-float -g -glevel -gcoff
-gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
-ggdb -p -pg -save-temps -print-file-name=library
-print-libgcc-file-name -print-prog-name=program
Optimization Options
-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
-fdelayed-branch -felide-constructors
-fexpensive-optimizations -ffast-math -ffloat-store
-fforce-addr -fforce-mem -finline-functions
-fkeep-inline-functions -fmemoize-lookups
-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 -O2
Preprocessor Options
-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
-idirafter dir -include file -imacros file -iprefix
file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
-Umacro -undef
Assembler Option
-Wa,option
Linker Options
-llibrary -nostartfiles -nostdlib -static -shared
-symbolic -Xlinker option -Wl,option -u symbol
Directory Options
-Bprefix -Idir -I- -Ldir
Target Options
-b machine -V version
Configuration Dependent Options
M680x0 Options
-m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
-mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
-mrtd -mshort -msoft-float
VAX Options
-mg -mgnu -munix
SPARC Options
-mepilogue -mfpu -mhard-float -mno-fpu
-mno-epilogue -msoft-float -msparclite -mv8
-msupersparc -mcypress
Convex Options
-margcount -mc1 -mc2 -mnoargcount
GNU Tools 1993/10/13 3
GCC(1) GNU Tools GCC(1)
AMD29K Options
-m29000 -m29050 -mbw -mdw -mkernel-registers
-mlarge -mnbw -mnodw -msmall -mstack-check
-muser-registers
M88K Options
-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
RS6000 Options
-mfp-in-toc -mno-fop-in-toc
RT Options
-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
MIPS Options
-mcpu=cpu type -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 -G num -nocpp
i386 Options
-m486 -mno-486 -msoft-float -mno-fp-ret-in-387
HPPA Options
-mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
-mno-shared-libs -mlong-calls -mdisable-fpregs
-mdisable-indexing -mtrailing-colon
i960 Options
-mcpu-type -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
DEC Alpha Options
-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
System V Options
GNU Tools 1993/10/13 4
GCC(1) GNU Tools GCC(1)
-G -Qy -Qn -YP,paths -Ym,dir
Code Generation Options
-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
OVERALL OPTIONS
-x language
Specify explicitly the language for the following
input files (rather than choosing a default based
on the file name suffix) . This option applies to
all following input files until the next `-x' op-
tion. Possible values of language are `c',
`objective-c', `c-header', `c++', `cpp-output',
`assembler', and `assembler-with-cpp'.
-x none
Turn off any specification of a language, so that
subsequent files are handled according to their
file name suffixes (as they are if `-x' has not
been used at all).
If you want only some of the four stages (preprocess, com-
pile, assemble, link), you can use `-x' (or filename suf-
fixes) to tell gcc where to start, and one of the options
`-c', `-S', or `-E' to say where gcc is to stop. Note
that some combinations (for example, `-x cpp-output -E')
instruct gcc to do nothing at all.
-c Compile or assemble the source files, but do not
link. The compiler output is an object file corre-
sponding to each source file.
By default, GCC makes the object file name for a
source file by replacing the suffix `.c', `.i',
`.s', etc., with `.o'. Use -o to select another
name.
GCC ignores any unrecognized input files (those
that do not require compilation or assembly) with
the -c option.
-S Stop after the stage of compilation proper; do not
assemble. The output is an assembler code file for
each non-assembler input file specified.
By default, GCC makes the assembler file name for a
source file by replacing the suffix `.c', `.i',
etc., with `.s'. Use -o to select another name.
GNU Tools 1993/10/13 5
GCC(1) GNU Tools GCC(1)
GCC ignores any input files that don't require com-
pilation.
-E Stop after the preprocessing stage; do not run the
compiler proper. The output is preprocessed source
code, which is sent to the standard output.
GCC ignores input files which don't require prepro-
cessing.
-o file
Place output in file file. This applies regardless
to whatever sort of output GCC is producing,
whether it be an executable file, an object file,
an assembler file or preprocessed C code.
Since only one output file can be specified, it
does not make sense to use `-o' when compiling more
than one input file, unless you are producing an
executable file as output.
If you do not specify `-o', the default is to put
an executable file in `a.out', the object file for
`source.suffix' in `source.o', its assembler file
in `source.s', and all preprocessed C source on
standard output.
-v Print (on standard error output) the commands exe-
cuted to run the stages of compilation. Also print
the version number of the compiler driver program
and of the preprocessor and the compiler proper.
-pipe Use pipes rather than temporary files for communi-
cation between the various stages of compilation.
This fails to work on some systems where the assem-
bler cannot read from a pipe; but the GNU assembler
has no trouble.
LANGUAGE OPTIONS
The following options control the dialect of C that the
compiler accepts:
-ansi Support all ANSI standard C programs.
This turns off certain features of GNU C that are
incompatible with ANSI C, such as the asm, inline
and typeof keywords, and predefined macros such as
unix and vax that identify the type of system you
are using. It also enables the undesirable and
rarely used ANSI trigraph feature, and disallows
`$' as part of identifiers.
The alternate keywords __asm__, __extension__,
GNU Tools 1993/10/13 6
GCC(1) GNU Tools GCC(1)
__inline__ and __typeof__ continue to work despite
`-ansi'. You would not want to use them in an ANSI
C program, of course, but it is useful to put them
in header files that might be included in compila-
tions done with `-ansi'. Alternate predefined
macros such as __unix__ and __vax__ are also avail-
able, with or without `-ansi'.
The `-ansi' option does not cause non-ANSI programs
to be rejected gratuitously. For that, `-pedantic'
is required in addition to `-ansi'.
The preprocessor predefines a macro __STRICT_ANSI__
when you use the `-ansi' option. Some header files
may notice this macro and refrain from declaring
certain functions or defining certain macros that
the ANSI standard doesn't call for; this is to
avoid interfering with any programs that might use
these names for other things.
-fno-asm
Do not recognize asm, inline or typeof as a key-
word. These words may then be used as identifiers.
You can use __asm__, __inline__ and __typeof__ in-
stead. `-ansi' implies `-fno-asm'.
-fno-builtin
Don't recognize built-in functions that do not be-
gin with two leading underscores. Currently, the
functions affected include _exit, abort, abs, allo-
ca, cos, exit, fabs, labs, memcmp, memcpy, sin,
sqrt, strcmp, strcpy, and strlen.
The `-ansi' option prevents alloca and _exit from
being builtin functions.
-fno-strict-prototype
Treat a function declaration with no arguments,
such as `int foo ();', as C would treat it--as say-
ing nothing about the number of arguments or their
types (C++ only). Normally, such a declaration in
C++ means that the function foo takes no arguments.
-trigraphs
Support ANSI C trigraphs. The `-ansi' option im-
plies `-trigraphs'.
-traditional
Attempt to support some aspects of traditional C
compilers. For details, see the GNU C Manual; the
duplicate list here has been deleted so that we
won't get complaints when it is out of date.
But one note about C++ programs only (not C).
GNU Tools 1993/10/13 7
GCC(1) GNU Tools GCC(1)
`-traditional' has one additional effect for C++:
assignment to this is permitted. This is the same
as the effect of `-fthis-is-variable'.
-traditional-cpp
Attempt to support some aspects of traditional C
preprocessors. This includes the items that
specifically mention the preprocessor above, but
none of the other effects of `-traditional'.
-fdollars-in-identifiers
Permit the use of `$' in identifiers (C++ only).
You can also use `-fno-dollars-in-identifiers' to
explicitly prohibit use of `$'. (GNU C++ allows
`$' by default on some target systems but not oth-
ers.)
-fenum-int-equiv
Permit implicit conversion of int to enumeration
types (C++ only). Normally GNU C++ allows conver-
sion of enum to int, but not the other way around.
-fexternal-templates
Produce smaller code for template declarations, by
generating only a single copy of each template
function where it is defined (C++ only). To use
this option successfully, you must also mark all
files that use templates with either `#pragma
implementation' (the definition) or `#pragma
interface' (declarations).
When your code is compiled with
`-fexternal-templates', all template instantiations
are external. You must arrange for all necessary
instantiations to appear in the implementation
file; you can do this with a typedef that refer-
ences each instantiation needed. Conversely, when
you compile using the default option
`-fno-external-templates', all template instantia-
tions are explicitly internal.
-fall-virtual
Treat all possible member functions as virtual, im-
plicitly. All member functions (except for con-
structor functions and new or delete member opera-
tors) are treated as virtual functions of the class
where they appear.
This does not mean that all calls to these member
functions will be made through the internal table
of virtual functions. Under some circumstances,
the compiler can determine that a call to a given
virtual function can be made directly; in these
cases the calls are direct in any case.