コンパイラー・オプションは、コンパイラーのデフォルト動作を変更するのに使用されるコマンドライン式です。大文字と小文字は区別されます。コンパイラー・オプションは、プログラムのコンパイルに必須ではありませんが、次のようなアプリケーションのさまざまな部分の制御に非常に役立ちます。
インテル® C++ コンパイラーに含まれているオプション機能の概要は、「オプションのカテゴリー」を参照してください。
コマンドラインでコンパイラー・オプションを指定する際の構文は、次のとおりです。
icc [options] [@response_file] file1 [file2...]
options には使用するコンパイラー・オプションを指定します。
file は、次のいずれかです。
C または C++ のソースファイル (.C .c .cc .cpp .cxx .c++ .i .ii)
アセンブリー・ファイル (.s .S)
オブジェクト・ファイル (.o)
スタティック・ライブラリー (.a)
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.c と file1.c が -O3 でコンパイルされ、file2.c が -mp1 でコンパイルされるように見えますが、そうではありません。すべてのファイルが両方のオプションでコンパイルされます。
ただし、-x type オプションは例外です。
icc -x c file1 -x c++ file2 -x assembler file3
type 引数によって各ファイルのタイプが特定されます。
コンパイラーは、デフォルトで多くのオプションを起動します。例えば、IA-32 アーキテクチャー・ベースのシステムでは、デフォルトで -O2 が有効になります。次の例では、コンパイラーは、コンパイル処理に -O2 (およびその他のデフォルトオプション) を含めます。
icc main.c
コンパイラー・オプションのデフォルト動作については、「コンパイラー・オプション」を参照してください。
コンパイラーを起動すると、対応する設定ファイル (icc.cfg または icpc.cfg) にリストされているオプションのほうが、競合するデフォルトオプションよりも優先されます。例えば、icc.cfg ファイルに -O3 オプションが含まれている場合、コンパイラーはデフォルトの -O2 オプションではなく、-O3 を使用します。設定ファイルを使用して、コンパイルごとに使用するオプションをリストできます。「設定ファイルの使用」を参照してください。
コマンドラインで指定されているオプションは、競合するオプション (デフォルトオプション、設定ファイルにリストされているオプション) よりも優先されます。コマンドラインで -O1 が指定されている場合、CL 環境変数で指定されている競合するオプションに加えて、競合するデフォルトオプションと設定ファイルにリストされているオプションは上書きされます。
ソースコードで特定の #pragma 文を使用して、コマンドラインで指定された競合オプションを上書きできます。例えば、コード中のある関数の前に #pragma optimize("", off) が配置されている場合、デフォルトで -O2 最適化がオンであったり、-O3 が設定ファイルにリストされていたり、または残りのプログラムに対してコマンドラインで -O1 が指定されていたとしても、その関数の最適化はオフになります。
コンパイラー・オプションは、-E/E などのように 1 文字程度の簡単なものです。ただし、多くのオプションには任意または必須の引数があります。例えば、-O オプションには、最適化の程度を決定する任意の引数が 1 つあります。オプションによっては、必須の引数が少なくとも 1 つあるものや、任意の引数が複数あるものもあります。引数があるほとんどのオプションでは、引数が認識されない場合、コンパイラーは警告を発行します。例えば、-O9 と指定した場合、コンパイラーは警告を発行し、認識できない -O9 オプションを無視して、コンパイルを続けます。
-O オプションでは、引数は必須ではありませんが、オプションによっては、引数を含めなければならないものもあります。-I オプションでは、インクルード・ファイルの検索パスに追加するディレクトリーを特定する引数が必要です。引数を指定せずにこのオプションを使用すると、コンパイルは終了しません。
オプションの詳細な説明とサポートについては、「コンパイラー・オプション」を参照してください。
オプションのオン/オフを否定表現を使用して切り替えることができます。例えば、-complex-limited-range オプションや、その他の多くのオプションでは、否定形式 -no-complex-limited-range を使用してオプションの状態を変更することができます。このオプションは、デフォルトでは無効ですが、コマンドラインで -complex-limited-range を使用すると、"オン" の状態に切り替わります。
インテル® C++ コンパイラーを起動し、コンパイラー・オプションを指定する際、さまざまな方法でコンパイラーのデフォルト動作を変更することができます。インテルのコンパイラー・オプションは、通常、次の 1 つまたは複数のカテゴリーに対応します。
高度な最適化
コード生成
互換性
コンポーネント制御
データ
非推奨
診断
浮動小数点
ヘルプ
インライン展開
プロシージャー間の最適化 (IPO)
言語
リンク/リンカー
その他
OpenMP* と並列処理
最適化
出力ファイル
プロファイルに基づく最適化 (PGO)
プリプロセッサー
各カテゴリーに含まれるオプションを参照するには、-help オプションとカテゴリーを指定して、コマンドラインからコンパイラーを起動してください。次に例を示します。
icc -help codegen
stdout に コード生成カテゴリーのオプションの名前と構文が出力されます。
インテル® コンパイラーを Eclipse* 統合開発環境 (IDE) で使用してアプリケーションをコンパイルする場合、プロジェクト全体、または個々のソースファイルに対してコンパイラー・オプションを指定できます。IDE では、[プロパティ ページ] に含まれていないオプションが必要な場合、コマンドラインでオプションを指定することもできます。
「Eclipse*でのアプリケーションのビルド」を参照してください。