Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183324
  • 博文数量: 5
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 310
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-07 21:52
文章分类

全部博文(5)

文章存档

2009年(2)

2008年(3)

我的朋友

分类: LINUX

2009-05-06 09:53:22

     GNU gcc 使用手册
      作者:佚名    文章来源:不详    点击数:    更新时间:2007-9-12   
      <序 >  
      伟大的GNU认为man手册是Open Source发展的过时产物, 于是他们针对各种当家软件出了各自的手册, 如GNU Emacs, GNU
      Vim, 当然gcc是不可缺少的, 这是Stallman一生最伟大的产物之一.
      Richard Stallman 是Open Source界的伟大人物之一, 他是gcc, gdb, emacs的作者, 名声在OS界不可谓不大.
      有一次, 他去某企业面试, 面试方问他, 你会用gdb吗? Stallman一语惊人: 会, 那就是我写的.
      好了, 闲话少说, 还是说gcc吧.
      
      1. 前言:
      gcc是一款编译器, 它主要在UNIX-BASE的系统上使用, windows版也有, 集成在MinGW中, 为了把GNU推广到Windows,
      真是煞费苦心啊.
      gcc编译器主要用于编译C和C++程序, 编译C++程序时通常使用g++命令, 实际上是gcc连接了libstdc++库.
      编译命令:
      gcc [option | filename]
      g++ [option | filename]
      
      2. 编译步骤:
      gcc编译器在编译时, 都需要用四个步骤里的一个或多个处理输入文件, 这四个步骤是:
        预处理(Pre-Processing)
        编译(Compilation)
        汇编(Assembly)
        连接(Linking)
      在这个过程中, 源文件的后缀名控制着编译器的缺省设定. 这个后缀指示出了程序代码所用语言
        gcc: 认为预处理后的文件(.i)是C文件.
        g++: 认为预处理后的文件(.i)是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, 否则连接总是最后的步骤.
      
      3. 选项总览:
      选项必须分立给出: `-dr'完全不同于`-d -r '.
      大多数`-f'和`-W'选项有两个相反的格式: -fname和 -fno-name
      (或-Wname和-Wno-name).这里只列举不是默认选项的格式.
      下面是所有选项的摘要,按类型分组,解释放在后面的章节中.
      总体选项(Overall Option)
      -c -S -E -o file -pipe -v -x language
       
      语言选项(Language Option)
      -ansi -fall-virtual -fcond-mismatch -fdollars-in-identifiers
      -fenum-int-equiv -fexternal-templates -fno-asm -fno-builtin -fhosted
      -fno-hosted -ffreestanding -fno-freestanding -fno-strict-prototype
      -fsigned-bitfields -fsigned-char -fthis-is-variable -funsigned-bitfields
      -funsigned-char -fwritable-strings -traditional -traditional-cpp
      -trigraphs
      
      警告选项(Warning Option)
      -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 -Wimplicit-int
      -Wimplicit-function-declaration -Winline -Wlong-long -Wmain
      -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-import
      -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow
      -Wstrict-prototypes -Wswitch -Wtemplate-debugging -Wtraditional -sion
      -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选项
      -mfp-in-toc -mno-fop-in-toc
      RT选项
      -mcall-lib-mul -mfp-arg-in-fdivgs -mfp-arg-in-gregs -mfull-fp-blocks
      -mhc-struct-return -min-line-mul -mminimum-fp-blocks -mnohc-struct-return
      MIPS选项
      -mcpu=cpu type -mips2 -mips3 -mint64 -mlong64 -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选项
      -m486 -mno-486 -msoft-float -mno-fp-ret-in-387
      HPPA选项
      -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs -mno-shared-libs
      -mlong-calls -mdisable-fdivgs -mdisable-indexing -mtrailing-colon
      i960选项
      -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选项
      -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
      System V选项
      -G -Qy -Qn -YP,paths -Ym,dir
      代码生成选项(Code Generation Option)
      -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
      Wtrigraphs -Wuninitialized -Wunused -Wwrite-strings
      调试选项(Debugging Option)
      -a -dletters -fdivtend-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 Option)
      -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 -O3
      预处理器选项(Preprocessor Option)
      -Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H -idirafter dir -include
      file -imacros file -idivfix file -iwithdivfix dir -M -MD -MM -MMD
      -nostdinc -P -Umacro -undef
      汇编器选项(Assembler Option)
      -Wa,option
      连接器选项(Linker Option)
      -llibrary -nostartfiles -nostdlib -static -shared -symbolic -Xlinker
      option -Wl,option -u symbol
      目录选项(Directory Option)
      -Bdivfix -Idir -I- -Ldir
      目标机选项(Target Option)
      -b machine -V version
      配置相关选项(Configuration Dependent Option)
      M680x0 选项
      -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881 -mbitfield -mc68000
      -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-float
      VAX选项
      -mg -mgnu -munix
      SPARC选项
      -mepilogue -mfpu -mhard-float -mno-fpu -mno-epilogue -msoft-float
      -msparclite -mv8 -msupersparc -mcydivss
      Convex选项
      -margcount -mc1 -mc2 -mnoargcount
      AMD29K选项
      -m29000 -m29050 -mbw -mdw -mkernel-registers -mlarge -mnbw -mnodw -msmall
      -mstack-check -muser-registers
      M88K选项
      -m88000 -m88100 -m88110 -mbig-pic -mcheck-zero-divi
      
      4. 总体选项介绍:
      -x language
      明确指出源代码所使用的语言为language, 而不通过文件后缀处理. 这个选项后使选项后面的文件都按照这个language语言判断,
      直到遇到下一个-x. language的可选值有: `c', `objective-c', `c-header', `c++',
      `cpp-output', `assembler',和`assembler-with-cpp'
      -x none
      关闭任何对于语言的说明, 依然文件后缀处理后面的文件.
      -c
      编译或汇编源文件, 生成目标文件(.o), 但不做连接. 这个选项同时也会使gcc忽略-c后面无法识别的文件.(它们不需要编译或汇编)
      -S
      编译后停止而不进行汇编, 生成汇编语言文件(.s).
      -E
      预处理后停止而不进行编译. 预处理后的代码送给标准输出.
      -o filename
      指定输出文件为filename. 该选项不在乎GCC要产生什么输出, 无论是可执行文件, 目标文件, 汇编文件, 还是预处理后的代码.
      如果没有-o选项, 默认的输出:
      可执行文件: a.out
      目标文件: source.suffix生成source.o
      汇编文件: source.suffix生成source.s
      -v
      在标准出错显示编译时的指令, 并显示GCC的版本.
      -pipe
      在编译过程的不同阶段使用管道而非临时文件进行通信.
      
      5. 语言选项:
      这些选项表示C语言的不同标准, 又被称为C语言的"方言".
      -ansi
      支持符合ANSI标准的C代码. 这样就会关闭一些关键字的使用, 如asm, typeof, inline等.
      其他选项在使用到时陆续添加.
      
      6. 预处理选项:
      下列选项针对C预处理器. 某些选项必须和'-E'一起用, 因为他们的结果不能用于编译.
      -C
      告诉处理器不要丢弃注释, 与'-E'配合使用.
      -P
      告诉处理器不要产生#line命令, 与'-E'配合使用.
      -M
      告诉处理器生成一个make规则, 用于描述各目标文件的依赖关系. 对于每个源文件输出一个make规则, 这个规则是根据#include产生的.
      '-M'选项隐含了'-E'.
      -MG
      把缺少的头文件按存在看待, 并且假定它们和源文件在同一个目录. 必须和'-M'一起使用.
      -MM
      和'-M'类似, 但输出结果仅限于用户头文件, 不包括系统头文件.
      -MD
      和'-M'类似, 但是把依赖信息输出在文件中(.d), 同时继续指定编译工作.
      -MMD
      和'-MD'类似, 但输出结果仅限于用户头文件.
      -H
      除了其他普通操作, GCC显示引用过的头文件名.
      -Dmacro
      定义宏macro, 宏的内容定义为字符'1'.
      -Dmacro=defn
      定义宏macro, 宏的内容定义为defn.
      -Umacro
      取消定义宏macro. '-U'选项在'-D'之后处理, 但是优先于'-include', '-imacros'.
      -dM
      输出有效的宏定义列表(预处理结束时仍然有效的宏定义).该选项需结合`-E'选项使用.
      -dD
      把所有的宏定义传递到输出端,按照出现的顺序显示.
      -dN
      和'-dD'类似, 但是只显示宏的名字, 而不显示值.
      
      7. 其他选项:
      gcc与gdb, ld, dbx等都有驱动选项, 这些开发工具都为gcc提供了驱动接口.
      
      -g
      使编译器进行debug编译, 连接成的可执行文件可被gdb进行调试用.
      -lLIB
      使编译器在连接时引用LIB库, 这个库可以是.so的动态库, 也可以是.a的归档库文件. 通常库的文件名为libxxx.so或libxxx.a,
      要连接这个库只需要-lxxx, 而不用加lib.
      -LPATH
      使编译器在连接库的时候除了默认的库搜索路径, 还可去PATH路径搜索.
阅读(1207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~