/sourceDependencies:directives (モジュールとヘッダー ユニットの依存関係を一覧表示する)

このコマンドライン オプションでは、ソース ファイルとその #include ステートメントがスキャンされ、モジュールのエクスポートとインポートを一覧表示する JSON ファイルが生成されます。 この情報は、ビルド システムでモジュールとヘッダー ユニットのビルド順序を決定するために使用できます。

このオプションは、次の点で /sourceDependencies とは異なります。

  • コンパイラでは、コンパイル済みの出力は生成されません。 コンパイル済みのコード、モジュール、またはヘッダー ユニットは生成されません。 代わりに、モジュール ディレクティブについてファイルがスキャンされます。
  • JSON 形式は、/sourceDependencies により生成される形式とは異なります。 オプション /sourceDependencies は、CMake などの他のビルド ツールで使用することを目的とします。
  • インポートされたモジュールとインポートされたヘッダー ユニット (.ifc ファイル) は出力 JSON ファイルに一覧表示されません。このオプションでは、コンパイルではなくプロジェクト ファイルがスキャンされるためです。 そのため、一覧表示するビルド済みのモジュールやヘッダー ユニットはありません。
  • 直接インポートされたモジュールまたはヘッダー ユニットだけが一覧表示されます。 インポートされたモジュールまたはヘッダー ユニット自体の依存関係は一覧表示されません。
  • ヘッダー ファイルの依存関係は一覧表示されません。 つまり、#include <file> または #include "file" の依存関係は一覧表示されません。
  • /sourceDependencies:directives は、.ifc ファイルをビルドする前に使用されることを意図しています。
  • /sourceDependencies によって、特定の翻訳単位に使用された、#includes ファイル、.pch ファイル、.ifc ファイルなど、すべてのファイルがコンパイラから報告されます。一方、/sourceDependencies:directives [file1] では、指定のソース ファイルがスキャンされ、すべての import および export ステートメントが報告されます。 /sourceDependencies/sourceDependencies:directives と共に使用できます。

構文

/sourceDependencies:directives-
/sourceDependencies:directivesfilename
/sourceDependencies:directivesdirectory

引数

-
単一ダッシュが指定されている場合、コンパイラはソース依存関係 JSON を stdout出力します。また、コンパイラの出力がリダイレクトされる場所にも出力されます。

filename
コンパイラでは、ソース依存関係の出力を指定したファイル名に書き込みます。これには相対パスまたは絶対パスが含まれる場合があります。 ファイルが存在しない場合は作成されます。

directory
引数がディレクトリの場合、コンパイラでは指定したディレクトリにソース依存関係ファイルを生成します。 ディレクトリが存在する必要があります。または、引数が .filename 出力ファイル名は入力ファイルの完全名をベースとし、.json 拡張子が付加されます。 たとえば、コンパイラに指定されるファイルが main.cpp の場合、生成される出力ファイル名は main.cpp.json です。

解説

/sourceDependencies:directives は、Visual Studio 2019 バージョン 16.10 以降で使用できます。

(複数のプロセスを含むビルド) コンパイラ オプションを/MP指定する場合は、ディレクトリ引数と共に使用/sourceDependencies:directivesすることをお勧めします。 このオプションを使用すると、コンパイラはソース ファイルごとに個別の *.module.json ファイルを出力します。 1 つの filename 引数を指定した場合、コンパイラの 2 つのインスタンスで出力ファイルを同時に開こうとし、エラーが発生する可能性があります。 with を/MP/sourceDependencies:directives-使用して出力を送信すると、stdoutインターリーブ結果が発生する可能性があります。

致命的でないコンパイラ エラーが発生した場合でも、依存関係情報は出力ファイルに書き込まれます。

出力には、すべてのファイル パスが絶対パスとして表示されます。

このスイッチは、/translateInclude と共に使用できます。

次のサンプル コードがあるとします。

//main.cpp:
#include <vector>

import m;
import std.core;

import <utility>;

import "t.h";

int main() {}

次のコマンド ラインによって

cl /std:c++latest /translateInclude /sourceDependencies:directives output.json main.cpp

次のような JSON ファイル output.json が生成されます。

{
   "Version":"1.1",
   "Data":{
      "Source":"C:\\a\\b\\main.cpp",
      "ProvidedModule":"",
      "ImportedModules":[
         "m",
         "std.core"
      ],
      "ImportedHeaderUnits":[
         "C:\\...\\utility",
         "C:\\a\\b\\t.h"
      ]
   }
}

簡単に言えば、前の例では ... を使用し、報告されるパスを省略します。 レポートには絶対パスが含まれます。 報告されるパスは、コンパイラで依存関係が見つかる場所によって変わります。 予期しない結果である場合は、プロジェクトのインクルード パスの設定を確認することをお勧めします。

ProvidedModule を指定すると、エクスポートされたモジュールまたはモジュール パーティションの名前の一覧が表示されます。

.ifc ファイルはビルドされなかったため、出力に一覧表示されません。 /sourceDependencies とは異なり、/sourceDependencies:directives を指定した場合にコンパイラではコンパイル済みの出力は生成されません。そのため、コンパイル済みのモジュールまたはヘッダー ユニットは生成されません。

このコンパイラ オプションを Visual Studio で使用するには

通常、Visual Studio 開発環境では、このオプションを自分で設定しないでください。 これはビルド システムによって設定されます。

関連項目

/translateInclude
C++ header-units.json のリファレンス
MSVC コンパイラ オプション
MSVC コンパイラのコマンド ライン構文
/scanDependencies (標準フォームでのモジュールの依存関係の一覧表示)
/sourceDependencies (すべてのソース レベルの依存関係を一覧表示する)