通过 gxlc 和 gxlc++ 重用 GNU C 和 C++ 编译器选项

每个 gxlc 和 gxlc++ 实用程序都接受 GNU C 或 C++ 编译器选项并将它们转换成相当的 XL C/C++ 选项。两个实用程序都使用 XL C/C++ 选项来创建 xlcxlC 调用命令,然后实用程序使用这些命令来调用 XL C/C++。提供这些实用程序的目的是为了便于重用为先前用 GNU C 和 C++ 开发的应用程序创建的 make 文件。然而,为了充分利用 XL C/C++ 的能力,建议您使用 XL C/C++ 调用命令及其相关选项。

gxlc 和 gxlc++ 的操作由配置文件 gxlc.cfg 控制。此文件中显示具有 XL C 或 XL C++ 对应选项的 GNU C 和 C++ 选项。并非每个 GNU 选项都具有对应的 XL C/C++ 选项。gxlc 和 gxlc++ 会对未转换的输入选项返回一个警告。

gxlc 和 gxlc++ 选项映射是可修改的。有关对 gxlc 和 gxlc++ 配置文件进行添加或编辑的信息,请参阅配置选项映射

示例

要使用 gcc -ansi 选项来编译 Hello World 程序的 C 版本,您可以使用:

gxlc -ansi hello.c

它转换为:

xlc -F:c89 hello.c

然后使用此命令来调用 XL C 编译器。

gxlc 和 gxlc++ 返回码

与其它调用命令一样,gxlc 和 gxlc++ 返回输出,如清单、与编译有关的诊断消息、与 GUN 选项的不成功转换有关的警告和返回码。如果 gxlc 或 gxlc++ 不能成功调用编译器,则它将返回码设置为以下其中一个值:

40
检测到 gcc 或 g++ 选项错误或不可恢复的错误。
255
当进程运行时检测到错误。

相关参考

gxlc 和 gxlc++ 语法

下图显示 gxlc 和 gxlc++ 语法:

>>-+-gxlc---+--+-----+--+----------------------------+--+--------------------+--filename-><
   '-gxlc++-'  +--v--+  '--Wx,--xlc_or_xlc++_options-'  '-gcc_or_g++_options-'
               '--vv-'
 
 

其中:

filename
是要编译的文件的名称。

-v
允许您验证将用来调用 XL C/C++ 的命令。gxlc 或 gxlc++ 在使用它所创建的 XL C/C++ 调用命令调用编译器之前显示该命令。

-vv
允许您运行模拟。gxlc 或 gxlc++ 显示它所创建的 XL C/C++ 调用命令,但不调用编译器。

-Wx,xlc_or_xlc++_options
将给定的 XL C/C++ 选项直接发送至 xlcxlc++ 调用命令。gxlc 或 gxlc++ 将给定的选项添加至它正在创建的 XL C/C++ 调用,而不会尝试转换它们。将此选项与已知的 XL C/C++ 选项配合使用以提高该实用程序的性能。多个 xlc_or_xlc++_options 使用逗号定界符。

gcc_or_g++_options
是将转换为 xlcxlc++ 选项的 gcc 或 g++ 选项。实用程序为它不能转换的任何选项发出一条警告。gxlc 和 gxlc++ 当前可识别的 gcc 和 g++ 选项列示在配置文件 gxlc.cfg 中。多个 gcc_or_g++_options 通过空格字符定界。

相关参考

GNU C 和 C++ 至 XL C/C++ 选项映射

下表列示 gxlc 和 gxlc++ 接受并转换的 GNUC 和 C++ 选项。将忽略指定为这些实用程序之一的输入的所有其它 GNU 选项或生成错误。如果 GNU 选项的否定格式存在,则 gxlc 和 gxlc++ 还识别和转换否定格式。

已映射的选项:GNU C 和 C++ 至 XL C/C++
GNU C 和 C++ 选项 XL C/C++ 选项
-### -#
-ansi -F:c89
-B -B
-C -C
-c -c
-Dmacro[=defn] -Dmacro[=defn]
-E -E
-e -e
-fdollars-in-identifiers -qdollar
C++-fdump-class-hierarchy
-qdump_class_hierarchy
C++-fexceptions
-qeh
C++-ffor-scope
-qlanglvl=ansifor
C++-fno-for-scope
-qlanglvl=noansifor
-ffunction-sections -qfuncsect
-finline -qinline
-finline-functions -qinline
注:
在 XL C/C++ 中 -qinline=limit=n 不是有效的子选项。 -finline-limit=n GNU C 和 C++ 子选项不能映射到此 XL C/C++ 子选项。
C++-fkeep-inline-functions
-qkeepinlines
C++-fno-gnu-keywords
-qnokeyword=typeof
C++-fno-operator-names
-qnokeyword=and -qnokeyword=bitand -qnokeyword=bitor -qnokeyword=compl -qnokeyword=not -qnokeyword=or -qnokeyword=xor
-fpascal-strings -qmacpstr
-fPIC -qpic=large
-fpic -qpic=small
C++-frtti
-qrtti
-fshort-enums -qenum=small
-fsigned-bitfields -qbitfields=signed
-fsigned-char -qchars=signed
-fstrict-aliasing -qalias=ansi
-fsyntax-only -qsyntaxonly
-funroll-all-loops -qunroll=yes
-funroll-loops -qunroll=yes
-funsigned-bitfields -qbitfields=unsigned
-funsigned-char -qchars=unsigned
-fwritable-strings -qnoro
-g -g
-g3 -g
-gdwarf -g
-ggdb -g
-Idir -Idir
-Ldir -Ldir
-llibrary -llibrary
-M -M
-MD -M
-mcpu=power -qarch=pwr
-mcpu=powerpc -qarch=ppc
-mcpu=powerpc64 -qarch=ppc64
-mno-fused-madd -qfloat=nomaf
-mfused-madd -qfloat=maf
-mlong-double-64 -qnolonglong
-mlong-double-128 -qlonglong
-mpower -qarch=pwr
-mpowerpc -qarch=ppc
-mpowerpc64 -qarch=ppc64
-mtune=power -qtune=pwr
-mtune=powerpc -qtune=ppc
-mtune=powerpc64 -qtune=ppc64
-nodefaultlibs -qnolib
-nostartfiles -qnocrt
-nostdinc -qnostdinc
-nostdlib -qnolib -qnocrt
-O -O
-O0 -qnoopt
-O1 -O
-O2 -O2
-O3 -O3
-Os -O2 -qcompact
-o -o
-p -p
-pg -pg
-r -r
-S -S
-s -s
仅用于 C-std=c89
-F:c89
仅用于 C-std=iso9899:1990
-F:c89
仅用于 C-std=iso9899:199409
-F:c89
仅用于 C-std=c99
-F:c99
仅用于 C-std=c9x
-F:c99
仅用于 C-std=iso9899:1999
-F:c99
仅用于 C-std=iso9899:199x
-F:c99
仅用于 C-std=gnu89
-qlanglvl=extc89
仅用于 C-std=gnu99
-qlanglvl=extc99
仅用于 C-std=gnu9x
-qlanglvl=extc99
C++-std=c++98
-qlanglvl=strict98
C++-std=gnu++98
-qlanglvl=extended
-time -qphsinfo
-trigraphs -qtrigraph
-Umacro -Umacro
-u -u
-Wformat -qformat
-Wuninitialized -qinfo=ini
-Wunreachable-code -qinfo=eff
-Wa,option -Wa,option
-Wl,option -Wl,option
-Wp,option -Wp,option
-w -w
-x assembler -qsourcetype=assembler
-x c -qsourcetype=c
-x c++ -qsourcetype=c++
-x none -qsourcetype=default
-Z -Z

所有其它 GNU 选项都会被忽略并且会发出参考消息。

相关参考

配置选项映射

gxlc 和 gxlc++ 实用程序使用配置文件 gxlc.cfg 来将 GNU C 和 C++ 选项转换为 XL C/C++ 选项。gxlc.cfg 中的每个条目描述实用程序应该如何将 GNU C 或 C++ 选项映射至 XL C/C++ 选项和如何处理它。

一个条目由一个处理指令标志字符串、一个 GNU C 选项字符串和一个 XL C/C++ 选项字符串组成。必须用空格将这三个字段分隔开。如果条目仅包含前两个字段并省略 XL C/C++ 选项字符串,则第二个字段中的 GNU C 选项将被 gxlc 识别但将被忽略而不进行提示。

# 字符用来将注释插入配置文件。注释可单独放在一行或放在条目末尾。

以下语法用于 gxlc.cfg 中的条目:

abcd    "gcc_or_g++_option"    "xlc_or_xlc++_option"

其中:

a
允许您通过添加 no- 作为前缀来禁用该选项。值 y 表示是,而 n 表示否。例如,如果将标志设置为 y,则可象 fno-inline 一样禁用 finline,那么该条目为:
ynn*        "-finline"                  "-qinline"

如果给出了 -fno-inline,则 gxlc 会将它转换为 -qnoinline

b
通知实用程序 XL C/C++ 选项具有一个相关联的值。值 y 表示是,而 n 表示否。例如,如果选项 -fmyvalue=n 映射到 -qmyvalue=n,则标志被设置为 y,那么该条目为:
nyn*        "-fmyvalue"            "-qmyvalue"

然后,gxlc 和 gxlc++ 将期望这些选项的值。

c
控制选项的处理。值可以为:

例如,gcc 选项 -I- 不受支持,一定会被 gxlc 和 gxlc++ 忽略。在这种情况下,标志设置为 i,那么该条目为:

nni*        "-I-"

如果 gxlc 和 gxlc++ 遇到此选项作为输入,则它将不会处理此选项并将生成警告。

d
允许 gxlc 和 gxlc++ 基于编译器的类型包括或忽略选项。值可以为:

例如,-fwritable-strings 受这两个编译器的支持,并映射至 -qnoro。条目为:

nnn*        "-fwritable-strings"        "-qnoro"

"gcc_or_g++_option"
是表示受 GNU C V3.3 支持的 gcc 或 g++ 选项的字符串。此字段是必需的并且必须用双引号引起来。

"xlc_or_xlc++_option"
是表示 XL C/C++ 选项的字符串。此字段是可选的,如果提供,则必须用双引号引起来。如果保留为空白,则 gxlc 和 gxlc++ 会忽略该条目中的 gcc_or_g++_option

有可能创建将映射某一范围内的选项的条目。通过使用星号(*)作为通配符来完成此操作。例如,gcc -D 选项需要用户定义的名称并可带一个可选值。可能具有以下选项系列:

-DCOUNT1=100
-DCOUNT2=200
-DCOUNT3=300
-DCOUNT4=400

不必为此选项的每个版本创建条目,只需一个条目:

nnn*        "-D*"                       "-D*"

其中星号将替换为 -D 选项后面的任何字符串。

反过来,您可使用星号来排除某一范围内的选项。例如,如果您想要 gxlc 或 gxlc++ 忽略所有 -std 选项,则条目将为:

nni*       "-std*"

当在选项定义中使用星号时,选项标志 ab 不适用于这些条目。

字符 % 与 GNU C 或 GNU C++ 选项配合使用以表示选项具有相关联的参数。这用来确保 gxlc 或 gxlc++ 将忽略与忽略的选项相关联的参数。例如,-include 选项不受支持并使用一个参数。应用程序一定会忽略这两者。在这种情况下,条目为:

nni*        "-include %"

相关参考

IBM Copyright 2003