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