/sourceDependencies(列出所有源级依赖项)

此命令行开关生成一个 JSON 文件,其中详细说明了编译期间使用的源级依赖项。 JSON 文件包含源依赖项列表,其中包括:

  • 头文件。 直接包含的以及这些标头包含的标头列表。
  • 使用的 PCH(如果指定了 /Yu)。
  • 导入的模块的名称
  • 直接导入的标头单元及其依次导入的模块和标头单元的文件路径和名称。

此选项提供以正确的依赖项顺序生成模块和标头单元所需的信息。

语法

/sourceDependencies-
/sourceDependencies filename
/sourceDependencies directory

参数

-
如果提供单个短划线,则编译器会将源依赖项 JSON 发出到 stdout 或发出到重定向了编译器输出的位置。

filename
编译器会将源依赖项输出写入指定文件名,其中可能包括相对路径或绝对路径。 如果文件不存在,则创建该文件。

directory
如果参数是目录,编译器会在指定的目录中生成源依赖项文件。 该目录必须存在,否则会将参数视为 filename。 输出文件名基于输入文件的全名,并使用追加的 .json 扩展名。 例如,如果提供给编译器的文件是 main.cpp,则生成的输出文件名为 main.cpp.json

备注

从 Visual Studio 2019 版本 16.7 开始提供 /sourceDependencies 编译器选项。 默认情况下不启用此功能。

指定 /MP(使用多个进程生成)编译器选项时,建议将 /sourceDependencies 与目录自变量配合使用。 如果提供单个文件名参数,编译器的两个实例可能会尝试同时打开此输出文件,导致错误。 将 /MP/sourceDependencies- 配合使用以将输出发送到 stdout 可能会导致交错的结果。

发生非致命编译器错误时,依赖项信息仍会写入输出文件。

所有文件路径都在输出中显示为绝对路径。

示例

给定以下示例代码:

// ModuleE.ixx:
export module ModuleE;
import ModuleC;
import ModuleD;
import <iostream>;

可以将 /sourceDependencies 与其他编译器选项一起使用:

cl ... /sourceDependencies output.json ... main.cpp

其中 ... 代表其他编译器选项。 此命令行生成 JSON 文件 output.json,其内容如下:

{
    "Version": "1.2",
    "Data": {
        "Source": "F:\\Sample\\myproject\\modulee.ixx",
        "ProvidedModule": "ModuleE",
        "Includes": [],
        "ImportedModules": [
            {
                "Name": "ModuleC",
                "BMI": "F:\\Sample\\Outputs\\Intermediate\\MyProject\\x64\\Debug\\ModuleC.ixx.ifc"
            },
            {
                "Name": "ModuleB",
                "BMI": "F:\\Sample\\Outputs\\Intermediate\\ModuleB\\x64\\Debug\\ModuleB.ixx.ifc"
            },
            {
                "Name": "ModuleD",
                "BMI": "F:\\Sample\\Outputs\\Intermediate\\MyProject\\x64\\Debug\\ModuleD.cppm.ifc"
            }
        ],
        "ImportedHeaderUnits": [
            {
                "Header": "f:\\visual studio 16 main\\vc\\tools\\msvc\\14.29.30030\\include\\iostream",
                "BMI": "F:\\Sample\\Outputs\\Intermediate\\HeaderUnits\\x64\\Debug\\iostream_W4L4JYGFJ3GL8OG9.ifc"
            }
        ]
    }
}

我们已使用 ... 缩写报告的路径。 报表包含绝对路径。 报告的路径取决于编译器找到依赖项的位置。 如果结果在意料之外,可能需要检查项目的包含路径设置。

ProvidedModule 列出导出的模块或模块分区名称。

在 Visual Studio 开发环境中设置此编译器选项

通常不应自行在 Visual Studio 开发环境中设置此选项。 它由生成系统设置。

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法
/scanDependencies
/sourceDependencies:directives