最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

GCC参数

工作和技术 crifan 2049浏览 0评论

GCC参数

1、GCC(GNU Compiler Collection)能完成从C、C++、objective-C、objective-C++、Jave、Fortran、Ada等源文件向运行在特定CPU硬件上的目标代码的转换。
"Front ends":The part of a compiler that is specific to a particular language。
"Back ends":The part that generate machine code for various processors。
2、GCC能够处理的源文件分为C、C++、Objective-C、汇编语言等。对于这些源文件,用他们的后缀名进行标示。GCC能够处理的后缀有:
*.c *.C    (C语言)     *.cxx   *.cc    (C++语言)      *.m    (面向对象的C)      *.i    (预处理后的C语言源文件)
*.ii    (预处理后的C++语言源文件)      *.s *.S    (汇编语言)      *.h    (头文件)
目标文件可以是:
*.o    编译连接后的目标文件      *.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 可以是如下的内容:
c objective-c    c-header   c++    cpp-output    assembler    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)
-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参数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
79 queries in 0.195 seconds, using 22.12MB memory