/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:directives
filename
/sourceDependencies:directives
directory
引数
-
1 つのダッシュが指定されている場合、コンパイラはソース依存関係 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 つのインスタンスで出力ファイルを同時に開こうとし、エラーが発生する可能性があります。 /sourceDependencies:directives-
で/MP
を使用して出力を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
(すべてのソース レベルの依存関係を一覧表示する)