[ GCC 1 | || | GCC 2 | || | GCC 3 | || | GCC 4 | || | GCC 5 ] |
| | | | | | | | |
GCC 5
Section: GNU Tools (1)
Updated: 2003/12/05
Supporter: Slots, Online Slots
下面的`-m'选项用于HPPA族计算机:
-mpa-risc-1-0
生成PA 1.0处理器的目标码.
-mpa-risc-1-1
生成PA 1.1处理器的目标码.
-
mkernel
生成适用于内核的目标码.特别要避免add指令,它有一个参数是DP寄存器;用addil 代替add指令.这样可以避免HP-UX连接器的某个严重bug.
-mshared-libs
生成能够连接HP-UX共享库的目标码.该选项还没有实现全部功能,对PA目标默认为关闭.使用这个选项会导致 编译器生成错误的目标码.
-mno-shared-libs
不生成连接HP-UX共享库的目标码.这是PA目标的默认选项.
-mlong-calls
生成的目标码允许同一个源文件中的函数调用,调用点和被调函数的距离可以超过256K之远.不需要打开这个开关选项, 除非连接器给出``branch out of range errors``这样的错误.
-mdisable-fpregs
防止任何情况下使用浮点寄存器.编译内核需要这个选项,内核切换浮点寄存器的执行环境速度非常缓慢.如果打开了这个 开关选项同时试图浮点操作,编译将失败.
-mdisable-indexing
防止编译器使用索引地址模式(indexing address mode).这样在MACH上编译MIG生成的代码时,可以 避免一些非常晦涩的问题.
-mtrailing-colon
在标记定义(label definition)的末尾添加一个冒号(用于ELF汇编器).
下面的`-m'选项用于Intel 80960族计算机:
向导
-mcpu-type
默认机器类型为cpu-type ,使编译器产生对应的指令,地址模式和内存对齐.默认的 cpu-type是kb;其他选择有ka, mc, ca, cf, sa,和sb.
-mnumerics
-msoft-float
-mnumerics开关选项指出处理器不支持浮点指令. -msoft-float开关选项指出不应该认为 机器支持浮点操作.
-mleaf-procedures
-mno-leaf-procedures
企图(或防止)改变叶过程(leaf procedure),使其可被bal指令以及call指令 调用.对于直接函数调用,如果bal指令能够被汇编器或连接器替换,这可以产生更有效的代码奇妙的和谐,但是其他情况下 产生较低效的代码,例如通过函数指针调用函数,或使用了不支持这种优化的连接器.
-mtail-call
-mno-tail-call
执行(或不执行)更多的尝试(除过编译器那些机器无关部分),优化进入分支的尾递归(tail-recursive)调用.你 可能不需要这个,因为检测什么地方无效没有全部完成.默认开关是-mno-
tail-call.
-mcomplex-addr
-mno-complex-addr
认为(或不认为)在当前的i960设备上,值得使用复合地址模式(complex addressing mode).复合地址模式 可能不值得用到K系列,但是一定值得用在C系列.目前除了CB和CC处理器,其他处理器上 -mcomplex-addr是默认选项.
-mcode-align
-mno-code-align
把目标码对齐到8字节边界上红领巾相约中国梦手抄报(或者不必),这样读取会快一些.目前只对C系列默认打开.
-mic-compat
-mic2.0-compat
-
mic3.0-compat
兼容iC960 v2.0或v3.0.
-masm-compat
-mintel-asm
兼容iC960汇编器.
-mstrict-align
-mno-strict-align
不允许(或允许)边界不对齐的访问.
-mold-align
使结构对齐(structure-alignment)兼容Intel的gcc发行版本1.3 (基于gcc 1.37).目前 这个选项有点问题,因为#pragma align 1总是作同样的设定,而且无法关掉.
下面的`-m'选项用于DEC Alpha设备:
-mno-soft-float
-msoft-float
使用(或不使用)硬件浮点指令进行浮点运算.打开-msoft-float时,将使用 `libgcc1.c'中的函数执行浮点运算.除非它们被仿真浮点操作的例程替换,或者类似,它们被编译为调用 仿真例程,这些例程将发出浮点操作.如果你为不带浮点操作的Alpha编译程序,你必须确保建立了这个库,以便不调用 仿真例程.
注意,不带浮点操作的Alpha也要求拥有浮点寄存器.
-mfp-reg
-mno-fp-regs
生成使用(或不使用)浮点寄存器群的目标代码. -mno-fp-regs包含有-msoft-float 开关选项.如果不使用浮点寄存器,浮点操作数就象整数一样通过整数寄存器传送,浮点运算结果放到$
0而不是$f0.这是非标准 调用,因此任何带有浮点参数或返回值的函数,如果被-mno-fp-regs开关编译过的目标码调用,它也必须 用这个选项编译.
这个选项的典型用法是建立内核,内核不使用任何浮点寄存器,因此没必要保存和恢复这些寄存器.
下面附加的选项出现在System V第四版中,用于兼容这些系统中的其他编译器:
-G
在SVr4系统中, gcc出于兼容接受了`-G'选项(然后传递给连接器).可是我们建议使用 `-symbolic'或`-shared'选项,而不在gcc命令行上出现连接选项.
-Qy
验证编译器用的工具的版本,输出到.ident汇编指令.
-Qn
制止输出端的.ident指令(默认选项).
-YP,dirs
对于`-l'指定的库文件,只搜索dirs.你可以在dirs中用冒号隔开各个 目录项.
-Ym,dir
在dir目录中寻找M4预处理器.汇编器使用这个选项.
代码生成选项(CODE GENERATION OPTION)
下面的选项和平台无关,用于控制目标码生成的接口约定.
大部分选项以`-f'开始.这些选项拥有确定和否定两种格式; `-ffoo'的否定格式是 `-fno-foo'.后面的描述将只列举其中的一个格式---非默认的格式.你可以通过添加或去掉 `no-'推测出另一个格式.
-fnonnull-objects
假设通过引用(reference)取得的对象不为null (仅C++).
一般说来, GNU C++对通过引用取得的对象作保守假设.例如,编译器一定会检查下似代码中的a不为 null:
obj &a = g (); a.f (2);
检查类似的引用需要额外的代码,然而对于很多程序是不必要的.如果你的程序不要求这种检查,你可以用 `-fnonnull-objects变成英文'选项忽略它.
-fpcc-struct-return
函数返回struct和union值时,采用和本地编译器相同的参数约定.对于较小的结构, 这种约定的效率偏低,扁豆炒肉而且很多机器上不能重入;它的优点是允许GCC编译的目标码和PCC编译的目标码互相调用.
-freg-struct-return
一有可能就通过寄存器返回struct和union函数值.对于较小的结构,它比 -fpcc-struct-return更有效率.
如果既没有指定-fpcc-struct-return ,也没有指定-freg-struct-return, GNU CC默认使用目标机的标准约定.如果没有标准约定, GNU CC默认采用-fpcc-struct-return.
-fshort-enums
给enum类型只分配它声明的值域范围的字节数.就是说, enum类型等于大小足够的 最小整数类型.愉快的周末英文
-fshort-double
使double类型的大小和float一样.
-fshared-data
要求编译结果的数据和非const变量是共享数据,而不是私有数据.这种差别仅在某些操作系统上面有意义, 那里的共享数据在同一个程序的若干进程间共享,而私有数据在每个进程内都有副件.
-fno-common
即使未初始化的全局变量也分配在目标文件的bss段,而不是把它们当做普通块(common block)建立.这样的 结果是,如果在两个不同的编译结果中声明了同一个变量(没使用extern ),连接它们时会产生错误. 这个选项可能有用的唯一情况是,你希望确认程序能在其他系统上运行,而其他系统总是这么做.
-fno-ident
忽略`#ident'指令.
-fno-gnu-linker
不要把全局初始化部件(如C++的构造子和解构子)输出为GNU连接器使用的格式(在GNU连接器是标准方法的系统 上).当你打算使用非GNU连接器的时候可以用这个选项,非GNU连接器也需要collect2程序确保系统连接器 放入构造子(constructor)和解构子(destructor). (GNU CC的发布包中包含有collect2 程序.)对于必须使用collect2的系统,编译器驱动程序gcc自动配置为这么做.
-finhibit-size-directive
不要输出.size汇编指令,或其他类似指令,当某个函数一分为二,两部分在内存中距离很远时会引起问题. 关于健康的手抄报当编译`crtstuff.c'时需要这个选项禅的故事;其他情况下都不应该使用.
-fverbo-asm
输出汇编代码时放些额外的注释信息.这个选项仅用于确实需要阅读汇编输出的时候(可能调试编译器自己的时候).