Partilhar via


/sourceDependencies:directives (Listar dependências do módulo e da unidade de cabeçalho)

Essa opção de linha de comando verifica os arquivos de origem e suas #include instruções para gerar um arquivo JSON que lista as exportações e importações de módulos. Um sistema de compilação pode usar essas informações para determinar a ordem de compilação de módulos e unidades de cabeçalho.

Esta opção difere /sourceDependencies das seguintes formas:

  • O compilador não produz saída compilada. Nenhum código compilado, módulos ou unidades de cabeçalho são produzidos. Em vez disso, os arquivos são verificados em busca de diretivas de módulo.
  • O formato JSON é diferente do que /sourceDependencies produz. A /sourceDependencies opção destina-se a ser usada com outras ferramentas de compilação, como o CMake.
  • O arquivo JSON de saída não lista módulos importados e unidades de cabeçalho importadas (.ifc arquivos) porque essa opção faz uma varredura dos arquivos de projeto, não uma compilação. Portanto, não há módulos construídos ou unidades de cabeçalho para listar.
  • Apenas módulos ou unidades de cabeçalho importados diretamente são listados. Ele não lista as dependências dos módulos importados ou unidades de cabeçalho em si.
  • As dependências do arquivo de cabeçalho não estão listadas. Ou seja, #include <file> ou #include "file" as dependências não são listadas.
  • /sourceDependencies:directives destina-se a ser usado antes .ifc que os arquivos sejam construídos.
  • /sourceDependenciesfaz com que o compilador relate todos os arquivos, como , arquivos, #includes arquivos e assim por diante, que foram usados para uma unidade de tradução específica, enquanto .pch verifica o arquivo de origem especificado e relata todas .ifc as instruções/sourceDependencies:directives [file1]. importexport /sourceDependencies pode ser usado com /sourceDependencies:directives.

Sintaxe

/sourceDependencies:directives-
/sourceDependencies:directives nome do arquivo
/sourceDependencies:directives Diretório

Argumentos

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

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. O ficheiro é criado se não existir.

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

Observações

/sourceDependencies:directives está disponível a partir do Visual Studio 2019 versão 16.10.

Quando você especifica a opção de /MP compilador (Build with multiple processes), recomendamos que você use /sourceDependencies:directives com um argumento de diretório. Esta opção torna a saída do compilador um arquivo separado *.module.json para cada arquivo de origem. Se você fornecer um único argumento de nome de arquivo, duas instâncias do compilador podem tentar abrir o arquivo de saída simultaneamente e causar um erro. O uso de /MP com /sourceDependencies:directives- para enviar saída para stdout poderia causar resultados intercalados.

Quando ocorre um erro de compilador não fatal, 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.

Este interruptor pode ser usado com /translateInclude.

Exemplos

Dado o seguinte código de exemplo:

//main.cpp:
#include <vector>

import m;
import std;
import <utility>;
import "t.h";

int main() {}

Esta seguinte linha de comando:

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

produz um arquivo output.json JSON semelhante a:

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

Por uma questão de brevidade, o exemplo anterior usa ... 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, convém verificar as configurações de caminho de inclusão do seu projeto.

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

Nenhum .ifc arquivo é listado na saída porque eles não foram criados. Ao contrário /sourceDependenciesdo , o compilador não produz saída compilada quando /sourceDependencies:directives é especificado, portanto, nenhum módulo compilado ou unidades de cabeçalho são produzidos.

Para definir essa opção de compilador no Visual Studio

Normalmente, você não deve definir essa opção sozinho no ambiente de desenvolvimento do Visual Studio. O sistema de compilação define-o.

Ver também

Importar a biblioteca padrão C++ usando módulos
/translateInclude
Referência header-units.json C++
opções do compilador MSVC
de sintaxe de linha de comando do compilador MSVC
/scanDependencies (Listar dependências do módulo no formulário padrão)
/sourceDependencies (Listar todas as dependências no nível de origem)