<script language=javascript src="http://www.inspiresky.com/AD/200602/14.js"></script> <script type=text/javascript> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script> <script src="http://www.inspiresky.com/AD/ADCount.asp?Action=View&ADID=7"></script> |
1.前言 GCC编译器的手册(GCC MANUAL)的英文版已经非常全面,并且结构也非常完善了,只是一直都没有中文的版本,我这次阅读了GCC编译器的主要内容,对手册的内容进行了结构性 的了解,认为有必要对这次阅读的内容进行整理,为以后的工作做准备。 由于我对这个英文手册的阅读也仅仅是结构性的。因此有很多地方并没有看,所以这篇文档的内容我也只能写出部分,对于以后需要详细了解的地方,会再往这篇文档中增添内容,需要增添的内容主要是编译器的各种开关。 2. GCC功能介绍 GCC编译器完成从C、C++、objective-C等源文件向运行在特定CPU硬件上的目标代码的转换(这是任何一个编译器需要完成的任务)。 GCC能够处理的源文件分为C、C++、Objective-C、汇编语言等。对于这些源文件,用他们的后缀名进行标示。GCC能够处理的后缀有: a. *.c *.C (C语言) b. *.cxx *.cc (C++语言) c. *.m (面向对象的C) d. *.i (预处理后的C语言源文件) e. *.ii (预处理后的C++语言源文件) f. *.s *.S (汇编语言) h. *.h (头文件) 目标文件可以是: a. *.o 编译连接后的目标文件 b. *.a 库文件 编译器把编译生成目标代码的任务分为以下4步: a.预处理,把预处理命令扫描处理完毕; b.编译,把预处理后的结果编译成汇编或者目标模块; c.汇编,把编译出来的结果汇编成具体CPU上的目标代码模块; d.连接,把多个目标代码模块连接生成一个大的目标模块; 3. GCC开关 GCC的运行开关共分为11类,这是类开关从11个方面控制着GCC程序的运行,以达到特定的编译目的。 3.1. 全局开关(OVERALL OPTIONS) 全局开关用来控制在“GCC功能介绍”中的GCC的4个步骤的运行,在缺省的情况下,这4个步骤都是要执行的,但是当给定一些全局开关后,这些步骤就会在某一步停止执行,这产生中间结果,例如可能你只是需要中间生成的预处理的结果或者是汇编文件(比如拟的目的是为了看某个CPU上的汇编语言怎么写)。 3.1.1. –x language 对于源文件是用什么语言编写的,可以通过文件名的后缀来标示,也可以用这开关。指定输入文件是什么语言编写的,language 可以是如下的内容 a. c b. objective-c c. c-header d. c++ e.cpp-output f.assembler g.assembler-with-cpp 3.1.2.–x none 把上一节介绍的-x开关都给关掉了。 3.1.3. –c 编译成把源文件目标代码,不做连接的动作。 3.1.4. –S 把源文件编译成汇编代码,不做汇编和连接的动作。 3.1.5. –E 只把源文件进行预处理之后的结果输出来。不做编译,汇编,连接的动作。 3.1.6. –o file 指明输出文件名是file。 3.1.7. –v 把整个编译过程的输出信息都给打印出来。 3.1.8.–pipe 由于gcc的工作分为好几步才完成,所以需要在过程中生成临时文件,使用-pipe就是用管道替换临时文件。 3.2. 语言相关开关(Language Options) 用来处理和语言相关的控制开关。 3.2.1.–ansi 这个开关让GCC编译器把所有的gnu的编译器特性都给关掉,让你的程序可以和ansi标准兼容。 除了以上的开关外,语言相关开关还有很多,如果在以后的工作学习中遇到了再加不迟!3.3.预处理开关(Preprocessor Options) 用来控制预处理所设置的开关。 3.3.1. –include file 在编译之前,把file包含进去,相当于在所有编译的源文件最前面加入了一个#include <file>语句,这样做更“省油”。 3.3.2. –imacros file 同-include file 一样。不过这个文件在具体编译的时候只有里面定义的宏才起作用,所以值用来在file文件里面定义宏。 3.3.3. –nostdinc 在搜寻include 的文件路径中去掉标准的c语言头文件搜索路径,例如stdio.h文件就是放在标准头文件搜索路径下。 3.3.4. –nostdinc++ 同上,只是去掉的是标准C++语言的头文件搜索路径。 3.3.5. –C 同-E参数配合使用。让预处理后的结果,把注释保留,让人能够比较好读它。 3.3.6. –Dmacro 把macro定义为字符串’1’。 3.3.7. –Dmacro = defn 把macro定义为defn。 3.3.8. –Umacro 把对macro的定义取消。 除了以上的开关外,预处理相关开关还有很多,如果在以后的工作学习中遇到了再加不迟! 3.4. 汇编开关(Assembler Option) 用来控制汇编行为的开关。 3.4.1. –Wa , option 把option作为开关送给汇编程序。如果option里面有逗号,则作为好几行进行处理。 3.5.连接开关(Linker Options) 用来控制连接过程的开关选项。 3.5.1. object-file-name 3.5.2. –llibrary 连接库文件开关。例如-lugl,则是把程序同libugl.a文件进行连接。 3.5.3. –lobjc 这个开关用在面向对象的C语言文件的库文件处理中。 3.5.4. –nostartfiles 在连接的时候不把系统相关的启动代码连接进来。 3.5.5. –nostdlib 在连接的时候不把系统相关的启动文件和系统相关的库连接进来。 3.5.6. –static 在一些系统上支持动态连接,这个开关则不允许动态连接。 3.5.7. –shared 生成可共享的被其他程序连接的目标模块。 连接相关的开关还有一些,以后需要的时候再补。 3.6.目录相关开关(Directory Options) 用于定义与目录操作相关的开关。 3.6.1. –Idir 宏include需要搜寻的目录。 3.6.2.–I- 与-I开关类似。 3.6.3.–Ldir 搜寻库文件(*.a)的路径。 和目录相关的开关还有很多,以后需要再加。 3.7. 警告开关(Warning Options) 与警告处理相关的开关。 3.7.1.–fsyntax-only 只检查代码中的语法错误,但并没有输出。 3.7.2. –w 禁止一切警告信息打印出来。 3.7.3. –Wno-import 禁止对宏#import提出警告。 3.7.4. –pedantic 3.7.5. –pedantic-errors 3.7.6. –W 还有很多与警告处理相关的开关,以后再补。 3.8. 调试开关(Debugging Options) 3.8.1.–g 把调试开关打开,让编译的目标文件有调试信息。 还有很多与调试处理相关的开关,以后再补。 3.9. 优化开关(Optimization Options) -O1 –O2 –O3 –O0,这些开关分别控制优化的强度,-O3最强。 3.10. 目标机开关(Target Options) 3.10.1. –b machine 在有的时候,Gcc编译器编译出来的目标代码并不是在运行这个编译动作的机器上运行而是另外一台机器,这种编译叫做交叉编译,用来运行最终目标代码的得机器叫做目标机,machine就是用来指明目标机的类型的。 3.10.2. –V version 用来告诉编译器使用它的多少版本的功能,version参数用来表示版本。 3.11. CPU相关开关(Machine Dependent Options) 比较多,也是在交叉编译的时候用得着。以后再说。 3.12. 生成代码开关(Code Generation Options) GCC 使用指南 gcc [ option | filename ]... 其中 option 为 gcc 使用时的选项(后面会再详述), 说明: 这 C 与 C++ 的 compiler 已将产生新程序的相关程序整合起来。产 gcc 预设经由预处理过(扩展名为.i)的文件为 C 语言,并於程式 g++ 预设经由预处理过(扩展名为.i)的文件为 C++ 语言,并於程 原始程序码的扩展名指出所用编写程序所用的语言,以及相对应的处 .c C 原始程序 ; 预处理、编译、汇编 其他扩展名的文件是由连结程序来处理,通常有: .o Object file 除非编译过程出现错误,否则 "连结" 一定是产生一个新程序的最 选项: 不同的选项必须分开来下:例如 `-dr' 这个选项就与 `-d -r' 大 绝大部份的 `-f' 及 `-W' 选项都有正反两种形式:-fname 及 以下是所有选项的摘要。以形式来分类。选项的意义将另辟小节说 一般性(概略、常用的)选项 程序语言选项 编译时的警告选项 除错选项 最佳化选项 预处理选项 汇编程序选项 连结程序选项 目录选项 Target Options 与机器(平台)相关的选项 VAX Options SPARC Options Convex Options AMD29K Options M88K Options RS6000 Options RT Options MIPS Options i386 Options HPPA Options i960 Options DEC Alpha Options System V Options Code Generation Options PRAGMAS #pragma interface #pragma implementation #pragma implementation "objects.h" If you use `#pragma implementation' with no argu- There is no way to split up the contents of a sin- 文件说明 TMPDIR comes from the environment variable TMPDIR (default /usr/tmp if available, else /tmp). ************************************************* -o FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,缺省文件名是a.out. -c 只编译不链接 -DFOO=BAR 在命令行定义预处理宏FOO,其值为BAR -IDIRNAME 将DIRNAME加入到头文件的搜索目录列表中 -LDIRNAME 将DIRNAME加入到库文件的搜索目录列表中,缺省情况下gcc 只链接共享库 -static 链接静态库,即执行静态链接 -lFOO 链接名为libFOO的函数库 -g 在可执行程序中包含标准调试信息 -ggdb 在可执行程序中包含只有GNU debugger才能使别的达两条是信息 -O 优化编译过的代码 -ON 指定代码优化的级别为N,o<=N<=3 -ansi 支持ANSI/ISO C的标准语法,取消GNU的语法扩展中与该标准有冲突的部分 (但这一选项并不能保证生成ANSI兼容的代码) -pedantic 允许发出ANSI/ISO C标准所列出的所有警告 -pedantic -errors 允许发出ANSI/ISO C标准所列出的所有错误 -traditional 支持Kernighan & Ritchie C语法(如用旧式语法定义函数);如果不知道这个选项的含义,也没有关系 -w 关闭所有警告,建议不要使用此项 .Wall 允许发出gcc能提供的所有有用的警告,也可以用-W(warning)来标记指定的警告 -werror 把所有警告转换为错误,以在警告发生时中止编译过程 -MM 输出一个make兼容的相关列表 -v 显示在编译过程的每一步中用到的命令 |
GCC使用指南
最新推荐文章于 2020-09-13 11:43:42 发布
GCC使用手册及常用命令行 作者:佚名 文章来源:中文引用 点击数: <script language=javascript src="http://www.inspiresky.com/Article/GetHits.asp?ArticleID=8"></script> 2402 更新时间:2005-7-25