Compartilhar via


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

Essa opção de linha de comando examina os arquivos de origem e suas instruções de #include para gerar um arquivo JSON que lista as importações e a exportação de módulos. Essas informações podem ser usadas por um sistema de compilação para determinar a ordem de compilação de módulos e unidades de cabeçalho.

Esta opção difere de /sourceDependencies das seguintes maneiras:

  • 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 opção /sourceDependencies deve ser usada com outras ferramentas de compilação, como CMake.
  • O arquivo JSON de saída não lista módulos importados e unidades de cabeçalho importadas (arquivos .ifc) porque esta opção faz uma varredura dos arquivos do projeto, não uma compilação. Portanto, não há módulos construídos ou unidades de cabeçalho para listar.
  • Somente módulos importados diretamente ou unidades de cabeçalho são listados. Ele não lista as dependências dos módulos importados ou das próprias unidades de cabeçalho.
  • As dependências do arquivo de cabeçalho não estão listadas. Ou seja, as dependências #include <file> ou #include "file" não são listadas.
  • /sourceDependencies:directives destina-se a ser usado antes que os arquivos .ifc sejam criados.
  • /sourceDependencies faz com que o compilador informe todos os arquivos, como #includes, .pch arquivos, .ifc arquivos e assim por diante, que foram usados para uma unidade de tradução específica, enquanto /sourceDependencies:directives [file1] verifica a fonte especificada arquivo e relata todas as instruções import e export. /sourceDependencies pode ser usado com /sourceDependencies:directives.

Sintaxe

/sourceDependencies:directives-
/sourceDependencies:directivesfilename
/sourceDependencies:directivesdiretó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

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

Ao especificar a opção de compilador /MP (Compilar com vários processos), recomendamos que você use /sourceDependencies:directives com um argumento de diretório. Essa opção faz com que o compilador produza um arquivo *.module.json separado para cada arquivo de origem. 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:directives- 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.

Esta opção pode ser usada com /translateInclude.

Exemplos

Dado o seguinte exemplo de código:

//main.cpp:
#include <vector>

import m;
import std.core;

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 JSON output.json semelhante a:

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

Por questões 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, é conveniente 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 arquivo .ifc está listado na saída porque eles não foram criados. Ao contrário de /sourceDependencies, o compilador não produz saída compilada quando /sourceDependencies:directives é especificado, portanto, nenhum módulo compilado ou unidade de cabeçalho é produzido.

Para definir essa opção do compilador no 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

/translateInclude
Referência de unidades de cabeçalho C++.json
Opções do compilador MSVC
Sintaxe de linha de comando do compilador MSVC
/scanDependencies (listar dependências do módulo no formato padrão)
/sourceDependencies (Listar todas as dependências de nível de origem)