gxlc および gxlc++ を使用した GNU C および C++ コンパイラー・オプションの再利用

各 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++ 構成ファイルへの追加または編集の詳細については、オプション・マッピングの構成を参照してください。

Hello World プログラムの C バージョンをコンパイルするために gcc -ansi オプションを使用するには、 以下を使用することができます。

gxlc -ansi hello.c

これは、以下のように変換されます。

xlc -F:c89 hello.c

変換後、このコマンドを使用して XL C コンパイラーを呼び出します。

gxlc および gxlc++ 戻りコード

他の呼び出しコマンドのように、gxlc および gxlc++ はリスト、コンパイルに関 する診断メッセージ、GNU オプションの変換の失敗に関する警告、および戻りコードなどの、出力を戻します。 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++ オプションを 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 は、 スペース文字で区切られています。

関連参照

GNU C および C++ から XL C/C++ へのオプション・マッピング

以下のテーブルは、gxlc および gxlc++ が受け取り、変換する GNU C および 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

注:
-qinline=limit=n は、XL C/C++ において有効なサブオプションではありません。-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 および GNU C++ オプションを XL C/C++ オプションに変換します。 gxlc.cfg の各項目は、ユーティリティーが GNU C または GNU C++ オプションを XL C/C++ オプションにマップする方法およびその処理方法を記述しています。

項目は、処理命令用のフラグのストリング、GNU C オプションのストリング、および XL C/C++ オプションのストリングから構成されています。 3 つのフィールドは、空白で分離する必要があります。 項目に最初の 2 つのフィールドのみが含まれ、XL C/C++ オプションのストリングが省略されている場合、2 番目のフィールドの GNU C オプションは、gxlc で認識はされますが無視されます。

# 文字を使用して、構成ファイルにコメントを挿入することができます。 コメントは、独立した行、または項目の最後に記述することができます。

gxlc.cfg の項目には、以下の構文を使用します。

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

以下、説明です:

a
プレフィックスとして no- を追加し、オプションを無効にします。値は y (yes)、または n (no) のいずれかです。例えば、フラグが y に設定されると、 finlinefno-inline として使用不可となり、項目は以下のようになります。
ynn*        "-finline"                  "-qinline"

-fno-inline の場合、gxlc はそれを -qnoinline に変換します。

b
XL C/C++ オプションに関連した値があることをユーティリティーに知らせます。 値は y (yes)、または n (no) のいずれかです。例えば、オプション -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 バージョン 3.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 %"

関連参照

IBM Copyright 2003