インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
コンパイラー・オプションは、コンパイラーのデフォルト動作を変更するのに使用されるコマンドライン式です。大文字と小文字は区別されます。コンパイラー・オプションは、プログラムのコンパイルに必須ではありませんが、次のようなアプリケーションのさまざまな部分を制御することができます。
インテル® C++ コンパイラーに含まれるオプションの機能については、「オプションのカテゴリー」を参照してください。
コマンドラインでコンパイラー・オプションを指定する際の構文は、次のとおりです。
icc [options] [@response_file] file1 [file2...] //Linux* および macOS*
options には使用するコンパイラー・オプションを指定し、file には次のいずれかを指定します。
C 言語ソースをコンパイルする場合は、icc でコンパイラーを起動します。C++ 言語ソースまたは C と C++ 言語が混在するソースをコンパイルする場合は、icpc でコンパイラーを起動します。
コマンドラインでコンパイラー・オプションを指定する際の構文は、次のとおりです。
icl [options] [@response_file] file1 [file2 ...][/link linker_options]
options には使用するコンパイラー・オプションを指定し、linker_options には使用するリンカー・オプションを指定し、file には次のいずれかを指定します。
オプションの response_file は、コンパイル時に使用するコンパイラー・オプションをリストしたテキストファイルです。詳細は、「応答ファイルの使用」を参照してください。
コンパイラーでは、コマンドライン・オプションは左から右に読み取られます。コンパイルで競合するオプションが含まれている場合は、コンパイラーは一番右端のオプションを使用します。次に例を示します。
// Linux* および macOS* icc –xSSSE3 main.c file1.c –xSSE4.2 file2.c
// Windows* icl /QxSSSE3 main.c file1.c /QxSSE4.2 file2.c
コンパイラーは、[Q]xSSSE3 と [Q]xSSE4.2 を同一オプションの 2 つの形式として読み取り、1 つの形式しか使用しません。[Q]xSSE4.2 が後のほうにあるため (最も右寄り)、このオプションを使用します。
コマンドラインで指定されたすべてのオプションが、それぞれのファイルのコンパイルで使用されます。コンパイラーは、特定のオプションで個別のファイルをコンパイルしません。次に例を示します。
// Linux* および macOS* 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* および macOS*) または /Qprec (Windows*) でコンパイルされるように見えますが、すべてのファイルが両方のオプションでコンパイルされます。
ただし、-x type オプションは例外です。
// Linux* および macOS* icc -x c file1 -x c++ file2 -x assembler file3
type 引数によって各ファイルのタイプが特定されます。
コンパイラーは、デフォルトで多くのオプションを起動します。次の例では、コンパイラーは、コンパイル処理に O2 オプション (およびその他のデフォルトオプション) を含めます。
// Linux* および macOS* icc main.c
// Windows* icl main.c
コンパイラーを起動すると、対応する設定ファイル (Windows* では icl.cfg、Linux* および macOS*では icc.cfg/icpc.cfg) にリストされているオプションのほうが、競合するデフォルトオプションよりも優先されます。例えば、設定ファイルに O3 オプションが含まれている場合、コンパイラーはデフォルトの O2 オプションではなく、O3 を使用します。設定ファイルを使用して、コンパイルごとに使用するオプションをリストできます。「設定ファイルの使用」を参照してください。
コマンドライン環境変数で指定されているオプションは、競合するデフォルトオプションと設定ファイルにリストされているオプションよりも優先されます。
コマンドラインで指定されているオプションは、競合するオプション (デフォルトオプション、設定ファイルにリストされているオプション、コマンドライン環境変数で指定されているオプション) よりも優先されます。コマンドラインで O1 オプションが指定されている場合、コマンドライン環境変数で指定されている競合するオプションに加えて、競合するデフォルトオプションと設定ファイルにリストされているオプションは上書きされます。
ソースコードで特定の #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* および macOS*) または /Qcomplex-limited-range- (Windows*) を使用してオプションの状態を変更することができます。このオプションは、デフォルトでは無効になっているため、"オン" の状態に切り替えるには、コマンドラインで [Q]complex-limited-range を指定する必要があります。
インテル® C++ コンパイラーを起動し、コンパイラー・オプションを指定する際、さまざまな方法でコンパイラーのデフォルト動作を変更することができます。インテル® C++ コンパイラー・オプションは、通常、次の 1 つまたは複数のカテゴリーに対応します。
各カテゴリーに含まれるオプションを参照するには、help オプションとカテゴリーを指定して、コマンドラインからコンパイラーを起動してください。次に例を示します。
icc -help codegen //Linux* および macOS*
icl /help codegen // Windows*
stdout にコード生成カテゴリーのオプションの名前と構文が出力されます。