/headerUnit (ヘッダー ユニット IFC を使用)

ヘッダー ユニットをインポートします。 指定されたヘッダーの .ifc ファイル (ヘッダー ユニットのバイナリ表現) を検索する場所をコンパイラに指示します。

構文

/headerUnit header-filename=ifc-filename
/headerUnit:quote [header-filename=ifc-filename]
/headerUnit:angle [header-filename=ifc-filename]

引数

header-filename
import header-name; の際、コンパイラは、header-name をディスク上のファイルへと解決します。 そのファイルを指定するには、header-filename を使用します。 照合が終わると、コンパイラは ifc-filename によって指定された対応する IFC をインポート用に開きます。

ifc-filename
コンパイル済みヘッダー ユニットの情報を格納しているファイルの名前です。 複数のヘッダー ユニットをインポートするには、ファイルごとに個別の /headerUnit オプションを追加します。

解説

/headerUnit コンパイラ オプションには、/std:c++20 以降が必要です。

/headerUnit コンパイラ オプションは、Visual Studio 2019 バージョン 16.10 以降で使用できます。

コンパイラが import "file";import <file>; にまたがっている場合は、このコンパイラ オプションを使用することで、指定されたヘッダー ファイルに対するコンパイル済みヘッダー ユニット (.ifc) をコンパイラによって検索できるようになります。 このファイルへのパスは、次の方法で表すことができます。

  • /headerUnit: 現在のディレクトリ、または ifc-filename によって指定された場所で、コンパイル済みヘッダー ユニットを検索します。

  • /headerUnit:quote: #include "file" と同じルールを使用して、コンパイル済みヘッダー ユニット ファイルを検索します。

  • /headerUnit:angle: #include <file> と同じルールを使用して、コンパイル済みヘッダー ユニット ファイルを検索します。

コンパイラでは、1 つの header-name を複数の .ifc ファイルにマップすることはできません。 複数の header-name 引数を 1 つの .ifc にマップすることは可能ですが、推奨されません。 .ifc の内容は、header-name によって指定された唯一のヘッダーであるかのようにインポートされます。

このオプションが使用された場合、コンパイラは新しいプリプロセッサを暗黙的に有効にします。 コマンド ラインで何らかのフォームの /headerUnit が指定されている場合には、コンパイラによって /Zc:preprocessor がコマンド ラインに追加されます。 暗黙的な /Zc:preprocessor をオプト アウトするには、次のように指定します: /Zc:preprocessor-

新しいプリプロセッサを無効にしたにもかかわらず、コンパイルしたファイルによってヘッダー ユニットがインポートされた場合には、コンパイラからエラーが報告されます。

次の表に示すように、2 つのヘッダー ファイルとそのヘッダー ユニットを参照するプロジェクトがあるとします。

ヘッダー ファイル IFC ファイル
C:\utils\util.h C:\util.h.ifc
C:\app\app.h C:\app\app.h.ifc

これらの特定のヘッダー ファイルに対するヘッダー ユニットを参照するコンパイラ オプションは、次のようになります。

cl ... /std:c++latest /headerUnit C:\utils\util.h=C:\util.h.ifc /headerUnit:quote app.h=app.h.ifc

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

通常、これは Visual Studio 開発環境で設定することはありません。 これはビルド システムによって設定されます。

関連項目

/exportHeader (ヘッダー ユニットの作成)
/headerName (指定されたヘッダーからのヘッダー ユニットの作成)
/reference (名前付きモジュール IFC の使用)
/translateInclude (インクルード ディレクティブをインポート ディレクティブに変換する)