Partilhar via


/sourceDependencies (Listar todas as dependências de nível de origem)

Essa opção de linha de comando gera um arquivo JSON que detalha as dependências de nível de origem consumidas durante a compilação. O arquivo JSON contém uma lista das dependências de origem, que incluem:

  • Arquivos de cabeçalho. Incluídos diretamente e a lista de cabeçalhos incluídos por esses cabeçalhos.
  • O PCH usado (se /Yu for especificado).
  • Nomes de módulos importados
  • Caminhos de arquivo e nomes de unidades de cabeçalho importadas diretamente e dos módulos e unidades de cabeçalho que eles importam por sua vez.

Essa opção fornece informações necessárias para compilar módulos e unidades de cabeçalho na ordem de dependência adequada.

Sintaxe

/sourceDependencies-
/sourceDependenciesfilename
/sourceDependenciesdiretório

Argumentos

-
Se for fornecido o traço único, o compilador emitirá as dependências de origem de JSON para stdout, ou, para onde for redirecionada a saída do compilador.

filename
O compilador grava a saída de dependência de origem no nome de arquivo especificado, que pode incluir um caminho relativo ou absoluto. Se ainda não existir, o arquivo será criado.

directory
Se o argumento for um diretório, o compilador gerará arquivos de dependência de origem no diretório especificado. O diretório tem que existir ou o argumento será tratado como um filename. O nome do arquivo de saída é baseado no nome completo do arquivo de entrada, com uma extensão .json acrescentada. Por exemplo, se o arquivo fornecido ao compilador for main.cpp, o nome do arquivo de saída gerado será main.cpp.json.

Comentários

A opção do compilador /sourceDependencies está disponível a partir do Visual Studio 2019 versão 16.7. Ela não vem habilitada por padrão.

Ao especificar a opção do compilador /MP (Compilar com vários processos), recomendamos que você use /sourceDependencies com um argumento de diretório. Se você fornecer um argumento de nome de arquivo único, duas instâncias do compilador poderão tentar abrir o arquivo de saída simultaneamente e causar um erro. O uso de /MP com /sourceDependencies- para enviar saída para stdout pode causar resultados intercalados.

Quando ocorre um erro não fatal do compilador, as informações de dependência ainda são gravadas no arquivo de saída.

Todos os caminhos de arquivo aparecem como caminhos absolutos na saída.

Exemplos

Dado o seguinte exemplo de código:

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

Você pode usar /sourceDependencies com o restante das opções do compilador:

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

onde ... representa as outras opções do compilador. Essa linha de comando produz um arquivo JSON output.json com conteúdo semelhante a:

{
    "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"
            }
        ]
    }
}

Costumávamos usar ... para abreviar os caminhos relatados. O relatório contém os caminhos absolutos. Os caminhos relatados dependem de onde o compilador encontra as dependências. Se os resultados forem inesperados, talvez você queira verificar as configurações de caminho de inclusão do projeto.

ProvidedModule lista os nomes de partição de módulo ou módulo exportados.

Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio

Normalmente, você não deve definir essa opção no ambiente de desenvolvimento do Visual Studio. Ela é definida pelo sistema de build.

Confira também

Opções do compilador MSVC
Sintaxe de linha de comando do compilador MSVC
/scanDependencies
/sourceDependencies:directives