コンパイラー・オプションの使用

コンパイラー・オプションは、コンパイラーのデフォルト動作を変更するのに使用されるコマンドライン式です。大文字と小文字は区別されます。コンパイラー・オプションは、プログラムのコンパイルに必須ではありませんが、次のようなアプリケーションのさまざまな部分の制御に非常に役立ちます。

インテル(R) C++ コンパイラーに含まれているオプション機能の概要は、「オプションのカテゴリー」を参照してください。

コマンドライン構文

コンパイラー・オプションをコマンドラインに指定する際の構文は、次のとおりです。

icc [options] [@response_file] file1 [file2...]

options は、0 個以上のコンパイラー・オプションです。

file は、次のいずれかです。

C 言語ソースのみをコンパイルする場合は、icc でコンパイラーを起動します。C++ 言語ソースのみ、または C と C++ が混在したソースをコンパイルする場合は、icpc でコンパイラーを起動してください。

オプションの response_file は、コンパイル中に含めるコンパイラー・オプションをリストしたテキストファイルです。「応答ファイルの使用」を参照してください。

コンパイラーでは、コマンドライン・オプションは左から右に読み取られます。コンパイルで競合するオプションが含まれている場合は、コンパイラーは一番右端のオプションを使用します。つまり、"遅いもの勝ち" です。次の例を参照してください。

icc -xP main.c file1.c -xW file2.c

コンパイラーでは、-xP-xW を同一オプションの 2 つの形式として読み取られ、1 つの形式しか使用されません。-xW が後のほうにあるため (最も右寄り)、このオプションが使用されます。

コマンドラインに指定されたオプションは、それぞれのファイルのコンパイルで使用されます。次の例が示唆するように、コンパイラーでは特定のオプションで個別のファイルをコンパイルすることはありません。

icc -O3 main.c file1.c -mp1 file2.c

main.cfile1.c-O3 でコンパイルされ、file2.c-mp1 でコンパイルされるように見えますが、そうではありません。すべてのファイルが両方のオプションでコンパイルされます。ただし、-xtype オプションは例外です。

icc -x c file1 -x c++ file2 -x assembler file3

type 引数によって各ファイルのタイプが特定されます。

デフォルト動作

コンパイラーは、デフォルトで多くのオプションを起動します。例えば、-O2 オプションは、IA-32 アーキテクチャー・ベース・システムのデフォルトです。この例では、コンパイラーは、コンパイル処理に -O2 (およびその他のデフォルトオプション) を含めます。

icc main.c

コンパイラー・オプションのデフォルト動作については、「コンパイラー・オプション」を参照してください。

コンパイラーを起動するごとに、対応する設定ファイル (icc.cfg または icpc.cfg) にリストされたオプションにより、競合するデフォルトオプションが上書きされます。例えば、icc.cfg ファイルに -O3 オプションが含まれている場合、コンパイラーはデフォルトの -O2 オプションではなく、-O3 を使用します。設定ファイルを使用して、コンパイルするごとに使用するオプションをリストできます。「設定ファイルの使用」を参照してください。

コマンドラインでオプションが指定されている場合は、競合するオプション (デフォルトオプション、設定ファイルにリストされているオプション) は上書きされます。コマンドラインで -O1 が指定されている場合、競合するデフォルトオプションと設定ファイルにリストされているオプションは上書きされます

ソースコード中の特定の #pragma 文を使用して、コマンドラインで指定された競合オプションを上書きできます。例えば、コード中のある関数の前に #pragma optimize("", off) が配置されている場合、デフォルトで -O2 最適化がオンだとしても、また、-O3 が設定ファイルにリストされていても、さらに、残りのプログラムに対してコマンドラインで -O1 が指定されていたとしても、その関数の最適化はオフになります。

引数を指定したオプションの使用

コンパイラー・オプションは、-E などのように 1 文字程度の簡単なものです。ただし、多くのオプションで引数を受け付けたり、また引数が必要なことがあります。例えば、-O オプションは、最適化の程度を決定する 1 つの引数を受け付けます。-ax オプションは、引数が必須で、また複数の引数を受け付けるオプションの良い例です。引数を受け付けるほとんどのオプションでは、引数が認識されない場合、コンパイラーは警告を発行します。例えば、-O9 と指定した場合、コンパイラーは警告を発行し、認識できない -O9 オプションを無視して、コンパイルを続けます。

-O オプションでは、引数は必須ではありませんが、引数を含めなければならない別のオプションがあります。-I オプションは、インクルード・ファイルの検索パスに追加するディレクトリーを特定する引数が必要です。引数を指定せずにこのオプションを使用すると、コンパイルは終了しません。

オプションの詳細な説明とサポートについては、「コンパイラー・オプション」を参照してください。

その他のオプションの形式

オプションのオンとオフを否定表現を使用して切り替えることができます。例えば、-complex-limited-range オプションや、その他の多くのオプションでは、否定形式 -no-complex-limited-range を使用してオプションの状態を変更することが可能です。このオプションは、デフォルトでは無効ですが、コマンドラインで -complex-limited-range を使用すると、"オン" の状態に切り替わります。

オプションのカテゴリー

インテル C++ コンパイラーを起動し、コンパイラー・オプションを指定する際、コンパイラーのデフォルト動作を変更する幅広い選択肢があります。インテル・コンパイラー・オプションは、通常、次の 1 つまたは複数のカテゴリーに対応します。

各カテゴリーに含まれるオプションを参照するには、-help category オプションを指定して、コマンドラインからコンパイラーを起動してください。次に例を示します。

icc -help codegen

stdout に [Code Generation (コード生成)] カテゴリーのオプションの名前と構文が出力されます。

統合開発環境でのコンパイラー・オプションの使用

インテル・コンパイラーを Eclipse 統合開発環境 (IDE) で使用してアプリケーションをコンパイルする場合、プロジェクト全体、または個々のソースファイルに対してコンパイラー・オプションを指定できます。IDE とコンパイラーの統合では、IDE の [プロパティ ページ] には含まれていないオプションが必要な場合に、コマンドラインでオプションを指定することもできます。

「Eclipse*でのアプリケーションのビルド」を参照してください。