コンパイラー・オプションは、コンパイラーのデフォルト動作を変更するのに使用されるコマンドライン表現です。大文字と小文字は区別されます。コンパイラー・オプションは、プログラムのコンパイルに必須ではありませんが、次のようなアプリケーションのさまざまな部分を制御することができます。
インテル® oneAPI DPC++/C++ コンパイラーに含まれるオプションの機能については、「オプションのカテゴリー」を参照してください。
コマンドラインでコンパイラー・オプションを指定する際の構文は、次のとおりです。
// Linux* [invocation] [options] [@response_file] file1 [file2...]
invocation は icx (C)、icpx (C++)、または dpcpp (DPC++) です。
options には使用するコンパイラー・オプションを指定し、file には次のいずれかを指定します。
C 言語ソースをコンパイルする場合は、icx でコンパイラーを起動します。C++ 言語ソースまたは C と C++ 言語が混在するソースをコンパイルする場合は、icpx でコンパイラーを起動します。DPC++ 言語ソースをコンパイルする場合は、dpcpp でコンパイラーを起動します。
コマンドラインでコンパイラー・オプションを指定する際の構文は、次のとおりです。
[invocation] [options] [@response_file] file1 [file2 ...][/link linker_options]
invocation は icx (C/C++) または dpcpp-cl (DPC++) です。
options には使用するコンパイラー・オプションを指定し、linker_options には使用するリンカー・オプションを指定し、file には次のいずれかを指定します。
オプションの response_file は、コンパイル時に使用するコンパイラー・オプションをリストしたテキストファイルです。詳細は、「応答ファイルの使用」を参照してください。
コンパイラーは、デフォルトで多くのオプションを起動します。次の例では、コンパイラーは、コンパイル処理に O2 オプション (およびその他のデフォルトオプション) を含めます。
// Linux* [invocation] main.c
// Windows* [invocation] main.c
invocation は、Linux* プロジェクトでは icx (C)、icpx (C++)、dpcpp (DPC++)、Windows* プロジェクトでは icx (C/C++)、dpcpp-cl (DPC++) です
コンパイラーを起動すると、対応する設定ファイルにリストされているオプションのほうが、競合するデフォルトオプションよりも優先されます。例えば、設定ファイルに O3 オプションが含まれている場合、コンパイラーはデフォルトの O2 オプションではなく、O3 を使用します。設定ファイルを使用して、コンパイルごとに使用するオプションをリストできます。「設定ファイルの使用」を参照してください。
コマンドライン環境変数で指定されているオプションは、競合するデフォルトオプションと設定ファイルにリストされているオプションよりも優先されます。
コマンドラインで指定されているオプションは、競合するオプション (デフォルトオプション、設定ファイルにリストされているオプション、コマンドライン環境変数で指定されているオプション) よりも優先されます。コマンドラインで O1 オプションが指定されている場合、コマンドライン環境変数で指定されている競合するオプションに加えて、競合するデフォルトオプションと設定ファイルにリストされているオプションは上書きされます。
ソースコードで特定の #pragma 文を使用して、コマンドラインで指定された競合オプションを上書きできます。例えば、コード中のある関数の前に #pragma optimize("", off) が配置されている場合、デフォルトで O2 最適化がオンであったり、O3 が設定ファイルにリストされていたり、または残りのプログラムに対してコマンドラインで O1 が指定されていたとしても、その関数の最適化はオフになります。
コンパイラーでは、コマンドライン・オプションは左から右に読み取られます。コンパイルで競合するオプションが含まれている場合は、コンパイラーは一番右端のオプションを使用します。次に例を示します。
C:// Linux*
icx –xSSSE3 main.c file1.c –xSSE4.2 file2.c
// Windows*
icx /QxSSSE3 main.c file1.c /QxSSE4.2 file2.c
C++:
// Linux*
icpx –xSSSE3 main.c file1.c –xSSE4.2 file2.c
// Windows*
icx /QxSSSE3 main.c file1.c /QxSSE4.2 file2.c
DPC++:
// Linux* dpcpp -O1 main.c file1.c -O2 file2.c
// Windows* dpcpp-cl /O1 main.c file1.c /O2 file2.c
コンパイラーは、[Q]xSSSE3 (C/C++) または O1 (DPC++) と [Q]xSSE4.2 (C/C++) または O2 (DPC++) を同一オプションの 2 つの形式として読み取り、1 つの形式しか使用しません。[Q]xSSE4.2 (C/C++) または O2 (DPC++) が後のほうにあるため (最も右寄り)、このオプションを使用します。
コマンドラインで指定されたすべてのオプションが、それぞれのファイルのコンパイルで使用されます。コンパイラーは、特定のオプションで個別のファイルをコンパイルしません。
ただし、-x type オプションは例外です。
C:
// Linux*
icx -x c file1 -x c++ file2 -x assembler file3
C++:
// Linux*
icpx -x c file1 -x c++ file2 -x assembler file3
DPC++:
// Linux* dpcpp -x c++-header file1 -x c++ file2
type 引数によって各ファイルのタイプが特定されます。
コンパイラー・オプションは、E などのように 1 文字程度の簡単なものです。多くのオプションには任意または必須の引数があります。例えば、O オプションには、最適化の程度を決定する任意の引数が 1 つあります。オプションによっては、必須の引数が少なくとも 1 つあるものや、任意の引数が複数あるものもあります。引数があるほとんどのオプションでは、引数が認識されない場合、コンパイラーは警告を発行します。例えば、O9 と指定した場合、コンパイラーは警告を発行し、認識できない O9 オプションを無視して、コンパイルを続けます。
O オプションでは、引数は必須ではありませんが、オプションによっては、引数を含めなければならないものもあります。I オプションでは、インクルード・ファイルの検索パスに追加するディレクトリーを特定する引数が必要です。引数を指定せずにこのオプションを使用すると、コンパイルは終了しません。
オプションのオン/オフを否定表現を使用して切り替えることができます。例えば、[Q]ipo オプション (およびその他の多くのオプション) では、否定形式 -no-ipo (Linux*) または /Qipo- (Windows*) を使用してオプションの状態を変更することができます。
インテル® oneAPI DPC++/C++ コンパイラーを起動し、コンパイラー・オプションを指定する際、さまざまな方法でコンパイラーのデフォルト動作を変更することができます。インテル® oneAPI DPC++/C++ コンパイラー・オプションは、通常、次の 1 つまたは複数のカテゴリーに対応します。
これは C++ 固有のコンテンツです。DPC++ には適用されません。
各カテゴリーに含まれるオプションを参照するには、help オプションとカテゴリーを指定して、コマンドラインからコンパイラーを起動してください。次に例を示します。
//Linux*
icx -help codegen
//Windows*
icx /help codegen
stdout にコード生成カテゴリーのオプションの名前と構文が出力されます。