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

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

インテル® oneAPI DPC++/C++ コンパイラーに含まれるオプションの機能については、「オプションのカテゴリー」を参照してください。

コマンドライン構文 (Linux*)

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

// Linux*
[invocation] [options] [@response_file] file1 [file2...]		    

invocationicx (C)、icpx (C++)、または dpcpp (DPC++) です。

options には使用するコンパイラー・オプションを指定し、file には次のいずれかを指定します。

C 言語ソースをコンパイルする場合は、icx でコンパイラーを起動します。C++ 言語ソースまたは C と C++ 言語が混在するソースをコンパイルする場合は、icpx でコンパイラーを起動します。DPC++ 言語ソースをコンパイルする場合は、dpcpp でコンパイラーを起動します。

コマンドライン構文 (Windows*)

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

[invocation] [options] [@response_file] file1 [file2 ...][/link linker_options]

invocationicx (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 を使用します。設定ファイルを使用して、コンパイルごとに使用するオプションをリストできます。「設定ファイルの使用」を参照してください。

デフォルトの .cfg ファイルは、インテル® oneAPI DPC++/C++ コンパイラーでは有効ではありません。デフォルトの .cfg ファイルの代わりに、-config<name> オプションを使用できます。<name> には、bin ディレクトリーにある設定ファイル、または使用する .cfg ファイルのフルパスを指定します。

コマンドライン環境変数で指定されているオプションは、競合するデフォルトオプションと設定ファイルにリストされているオプションよりも優先されます。

コマンドラインで指定されているオプションは、競合するオプション (デフォルトオプション、設定ファイルにリストされているオプション、コマンドライン環境変数で指定されているオプション) よりも優先されます。コマンドラインで 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 にコード生成カテゴリーのオプションの名前と構文が出力されます。

関連情報