订单查询 购书指南 购物车 收藏  
    首页 热点专题 精确搜索 精品推荐 俱乐部论坛 下载服务 走近科海 征稿专栏 新书预告 各地经销商 特价直销


GCC 技术参考大全

附录D 命令行选项

目录 前言
 


本附录按照字母顺序列出所有的命令行选项。这些选项中的某些可以作用于每种语言,而另一些则只能作用于一种或一些语言,它们只是多种语言中的一小部分。也有一些作用于预处理程序、汇编器或是链接器的选项。对每个选项,都在相应选项的右边标出了它所作用的一种或多种语言。如果某个选项作用于所有语言,就没有这样的标记了。

事实上用 gcc 命令可以编译任何一种语言,但可能就无法使用某种限制语言的选项了。每种语言都有自己的前端驱动处理,因此如果某选项只针对一种语言,为了识别这些选项,就需要使用相应的驱动作为 gcc 的前端。

D.1 选项前缀

所有选项都以连字符开始。它们中的一些还会用两个连字符。某些以 -f 和 -W 开始的选项还有一些特殊的含义。

前缀 --

在命令行中,标识选项的传统方法是在字母前加一个连字符。新的方式则是以两个连字符开始。本索引中列出的许多选项既有旧的形式,也有新的形式,但意义完全相同。例如,设定在生成的代码中携带调试信息的传统选项是:

-g

同一选项还可以用如下较长的形式,如:

--debug

前缀 -f

字母 f 代表 flag (标记)。大多数选项只有两种状态,开和关。例如,下面的选项设定是否打开窥孔( peephole )优化:

-fpeephole

由于这一标记要么是开,要么是关,因而每个标记选项都有一个相反的选项,它使用相同的名字,但以 no 作为前缀。例如:

-fno-peephole

几乎所有的选项都会触发一个真或假的标记设置,因此选项中的一个值会是默认设置。但也有例外。比如,如下两个选项中的任意一个都能指出 for 循环中变量的作用域:

-ffor-scope
-fno-for-scope

两个作用域设置中的任何一个都不是默认的。默认方式会符合标准,但这两个设置都是标准的变体。

任何 -f 选项都可以具有一个双连字符的选项形式。例如,如下两个选项功能相同:

-frtti
--rtti

前缀 -W

前缀 -W 通常用来指定是否需要编译程序产生某些警告消息。与 -f 标记的设定方式相似,警告也可以打开或是在名字前加 no 来关闭。例如,如下的设定可以令编译程序在对函数调用使用了太多的参数时产生警告:

-Wformat-extra-args

如果需要抑制警告消息,可以使用如下选项:

-Wno-format-extra-args

D.1.1 命令行的顺序

选项的顺序很重要。如果命令行中有两个选项,并且它们是冲突的,通常第二个选项会改变第一个选项所产生的设定,从而覆盖了第一个选项。命令行一般由左向右进行分析,每个选项设定一个值或是一个标记(或是一组值或标记),因此在命令行中设置好的内容可能在其后被修改。

对顺序的要求其实很有实用价值。例如, -O3 优化选项将打开 -finline-functions 选项。但如果想使用 -O3 选项,又要关闭函数内嵌功能,可以按下面的顺序输入选项:

-O3 -fno-inline-functions

D.1.2 文件类型

编译程序通过匹配表 D-1 中的后缀检查文件名,从而判断文件的内容。任何具有未知后缀的文件都视作目标机上链接器的输入,并在链接阶段传递给链接器。选项 -x 可以指示编译程序忽略后缀并将文件作为某一类型对待。

表 D-1 GCC 可识别的文件名后缀

后缀

文件内容

.a

包含一个或多个供链接器使用的 .o 文件的静态库(也称为归档文件)

.c

需要进行预处理的 C 源代码

.adb

Ada 体文件,就是包含库单元体的源文件

.ads

Ada 规范文件,就是包含库单元声明或库单元重命名声明的源文件

.C .c++ .cc .cp .cpp .cxx

需要进行预处理的 C++ 源代码

.class

一个包含通过编译 Java 程序产生的字节码的文件

.f .for .FOR

不需要预处理的 Fortran 源代码

.F .fpp .FPP

需要预处理的 Fortran 源代码

.h

C , C++ 或 Objective-C 的头文件

.i

不需要预处理的 C 源代码

.ii

不需要预处理的 C++ 源代码

.java

Java 源代码

.m

需要预处理的 Objective C 源代码

.mi

不需要预处理的 Objective C 源代码

.mo

包含国际化支持翻译的二进制文件

.o

可供链接器使用的目标文件

.po

包含国际化支持翻译的文本文件

.r

需要由 RATFOR 预处理程序预处理的 Fortran 源代码

.S

需要预处理的汇编语言源代码

.s

不需要预处理的汇编语言源代码

.so

包含一个或多个供链接器使用的 .o 文件的动态库(也称共享库)

<other>

具有不可识别后缀或无后缀的文件,这些文件均视为链接器的输入并且不做任何修改



 

 
  下一页 回专题首页