每个 gxlc 和 gxlc++ 实用程序都接受 GNU C 或 C++
编译器选项并将它们转换成相当的 XL C/C++ 选项。两个实用程序都使用 XL C/C++
选项来创建 xlc 或 xlC
调用命令,然后实用程序使用这些命令来调用 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---+--+-----+--+----------------------------+--+--------------------+--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++ 选项直接发送至 xlc 或 xlc++
调用命令。gxlc 或 gxlc++ 将给定的选项添加至它正在创建的 XL C/C++
调用,而不会尝试转换它们。将此选项与已知的 XL C/C++
选项配合使用以提高该实用程序的性能。多个 xlc_or_xlc++_options
使用逗号定界符。
- gcc_or_g++_options
- 是将转换为 xlc 或 xlc++ 选项的 gcc 或 g++
选项。实用程序为它不能转换的任何选项发出一条警告。gxlc 和 gxlc++ 当前可识别的
gcc 和 g++ 选项列示在配置文件 gxlc.cfg 中。多个 gcc_or_g++_options 通过空格字符定界。
相关参考
下表列示 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
|
-fdump-class-hierarchy
| -qdump_class_hierarchy
|
-fexceptions
| -qeh
|
-ffor-scope
| -qlanglvl=ansifor
|
-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++ 子选项。
|
-fkeep-inline-functions
| -qkeepinlines
|
-fno-gnu-keywords
| -qnokeyword=typeof
|
-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
|
-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
|
-std=c89
| -F:c89
|
-std=iso9899:1990
| -F:c89
|
-std=iso9899:199409
| -F:c89
|
-std=c99
| -F:c99
|
-std=c9x
| -F:c99
|
-std=iso9899:1999
| -F:c99
|
-std=iso9899:199x
| -F:c99
|
-std=gnu89
| -qlanglvl=extc89
|
-std=gnu99
| -qlanglvl=extc99
|
-std=gnu9x
| -qlanglvl=extc99
|
-std=c++98
| -qlanglvl=strict98
|
-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
- 控制选项的处理。值可以为:
- n,它指示实用程序处理列示在 gcc-option 字段中的选项。
- i,它指示实用程序忽略列示在 gcc-option 字段中的选项。gxlc 和
gxlc++ 将生成一条消息表示该选项已被忽略,并继续处理给出的选项。
- e,它指示实用程序当遇到列示在 gcc-option
字段中的选项时停止处理。gxlc 和 gxlc++ 还将生成错误消息。
例如,gcc 选项 -I- 不受支持,一定会被 gxlc 和 gxlc++
忽略。在这种情况下,标志设置为
i,那么该条目为:
nni* "-I-"
如果 gxlc 和 gxlc++ 遇到此选项作为输入,则它将不会处理此选项并将生成警告。
- d
- 允许 gxlc 和 gxlc++ 基于编译器的类型包括或忽略选项。值可以为:
- c,它指示 gxlc 和 gxlc++ 仅对 C 转换选项。
- x,它指示 gxlc 和 gxlc++ 仅对 C++ 转换选项。
- *,它指示 gxlc 和 gxlc++ 对 C 和 C++ 转换选项。
例如,-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*"
当在选项定义中使用星号时,选项标志 a 和
b 不适用于这些条目。
字符 % 与 GNU C 或 GNU C++
选项配合使用以表示选项具有相关联的参数。这用来确保 gxlc 或 gxlc++
将忽略与忽略的选项相关联的参数。例如,-include
选项不受支持并使用一个参数。应用程序一定会忽略这两者。在这种情况下,条目为:
nni* "-include %"
相关参考
