/scanDependencies (標準フォームでのモジュールの依存関係の一覧表示)

このコンパイラ オプションは、C++ 標準の提案 P1689R4 Format for describing dependencies of source filesに従ってモジュールとヘッダー単位の依存関係を一覧表示する JSON ファイルを生成します。

コンパイラ オプションは /scanDependencies 、それらを使用するプロジェクトをコンパイルする前に、コンパイルする必要があるモジュールとヘッダー ユニットを識別します。 たとえば、ヘッダー ユニットの依存関係として、import name;またはimport "library";モジュールの依存関係として一覧表示import <library>;されます。 目的は、この情報を CMake などのビルド ツールで使用できる共通の形式で提供することです。

このコマンド ライン オプションは似ています/sourceDependencies:directives/sourceDependenciesが、次の点で異なります。

  • 出力では、によって生成された Microsoft 固有のスキーマではなく、スキーマが/sourceDependencies:directives使用P1689R4されます。
  • コンパイラ /sourceDependenciesはコンパイルされた出力を生成しません。 代わりに、モジュール ディレクティブについてファイルがスキャンされます。 コンパイル済みのコード、モジュール、またはヘッダー ユニットは生成されません。
  • このオプションはプロジェクト ファイルのみをスキャンするため、出力 JSON ファイルには、インポートされたモジュールとインポートされたヘッダー ユニット (.ifc ファイル) は一覧表示されません。 リストするビルドモジュールやヘッダーユニットはありません。
  • 直接インポートされたモジュールまたはヘッダー ユニットだけが一覧表示されます。 インポートされたモジュールまたはヘッダー ユニット自体の依存関係は一覧表示されません。
  • オプションを使用して/translateIncludeヘッダーユニットに変換されない限り、依存関係として一覧表示される、または#include "file"依存関係として一覧表示されないヘッダー ファイルなど#include <file>、テキストに含まれるヘッダー ファイル。
  • /scanDependencies は、.ifc ファイルをビルドする前に使用されることを意図しています。

構文

/scanDependencies-
/scanDependencies filename
/scanDependencies directory

引数

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

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

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

解説

/scanDependenciesは、Visual Studio 2022 バージョン 17.2 プレビュー 1 以降で使用できます。 これは、既定では有効になっていません。

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

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

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

出力 JSON ファイルで使用される形式とスキーマの詳細については、セクション 6 を参照してください P1689R4

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

//app.cpp:
#include <vector>

import other.module;
import std.core;

import "t.h";

import <iostream>;

int main() {}

cl /std:c++latest /scanDependencies output.json app.cpp

このコマンド ラインでは、次のような内容の JSON ファイル output.json が生成されます。

{
    "version": 1,
    "revision": 0,
    "rules": [
        {
            "primary-output": "app.obj",
            "outputs": [
                "C:\\Users\\username\\source\\repos\\app\\app"
            ],
            "requires": [
                {
                    "logical-name": "other.module"
                },
                {
                    "logical-name": "std.core"
                },
                {
                    "logical-name": "t.h",
                    "source-path": "C:\\Users\\username\\source\\repos\\app\\app\\t.h",
                    "lookup-method": "include-quote",
                    "unique-on-source-path": true
                },
                {
                    "logical-name": "iostream",
                    "source-path": "C:\\Program Files\\...\\include\\iostream",
                    "lookup-method": "include-angle",
                    "unique-on-source-path": true
                }
            ]
        }
    ]
}

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

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

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

通常は、Visual Studio開発環境でこのオプションを自分で設定しないでください。 このオプションを設定しても、コンパイラはオブジェクト ファイルを生成しないため、リンク ステップが失敗し、エラーが報告されます。

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関するページを参照してください。

  2. [構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。

  3. [追加オプション] プロパティを変更して、出力用のディレクトリを参照/scanDependencies -します/scanDependencies "pathname"pathname

  4. [OK] を選択して変更を保存します。

このコンパイラ オプションをコードから設定するには

関連項目

MSVC コンパイラ オプション
MSVC コンパイラ コマンド ラインの構文
/sourceDependencies:directives
/sourceDependencies
/translateInclude