/sourceDependencies:directives (Elencare le dipendenze del modulo e dell'unità di intestazione)

Questa opzione della riga di comando analizza i file di origine e le relative #include istruzioni per generare un file JSON che elenca l'esportazione e le importazioni del modulo. Queste informazioni possono essere usate da un sistema di compilazione per determinare l'ordine di compilazione di moduli e unità di intestazione.

Questa opzione differisce da /sourceDependencies nei modi seguenti:

  • Il compilatore non produce l'output compilato. Non vengono prodotti codice, moduli o unità di intestazione compilati. I file vengono invece analizzati per individuare le direttive del modulo.
  • Il formato JSON è diverso da quello che /sourceDependencies produce. L'opzione /sourceDependencies deve essere usata con altri strumenti di compilazione, ad esempio CMake.
  • Il file JSON di output non elenca i moduli importati e le unità di intestazione importate (.ifc file) perché questa opzione esegue un'analisi dei file di progetto, non una compilazione. Non sono quindi presenti moduli compilati o unità di intestazione da elencare.
  • Vengono elencati solo i moduli o le unità di intestazione direttamente importati. Non elenca le dipendenze dei moduli importati o delle unità di intestazione stesse.
  • Le dipendenze dei file di intestazione non sono elencate. Ovvero, #include <file> o #include "file" le dipendenze non sono elencate.
  • /sourceDependencies:directives deve essere usato prima della .ifc compilazione dei file.
  • /sourceDependenciesfa in modo che il compilatore restituisca tutti i file, ad esempio #includes, file, .ifc file e così via, usati per una particolare unità di conversione, mentre /sourceDependencies:directives [file1] analizza il file di origine specificato e segnala tutte le import istruzioni e export.pch . /sourceDependencies può essere usato con /sourceDependencies:directives.

Sintassi

/sourceDependencies:directives-
/sourceDependencies:directivesfilename
/sourceDependencies:directivesdirectory

Argomenti

-
Se viene fornito il trattino singolo, il compilatore genererà le dipendenze di origine JSON a stdouto alla posizione in cui viene reindirizzato l'output del compilatore.

filename
Il compilatore scrive l'output della dipendenza di origine nel nome file specificato, che può includere un percorso relativo o assoluto. Se il file non esiste, verrà creato.

directory
Se l'argomento è una directory, il compilatore genera file di dipendenza di origine nella directory specificata. La directory deve esistere oppure l'argomento viene considerato come .filename Il nome del file di output si basa sul nome completo del file di input, con un'estensione aggiunta .json . Ad esempio, se il file fornito al compilatore è main.cpp, il nome file di output generato è main.cpp.json.

Osservazioni:

/sourceDependencies:directives è disponibile a partire da Visual Studio 2019 versione 16.10.

Quando si specifica l'opzione del /MP compilatore (Compilazione con più processi), è consigliabile usare /sourceDependencies:directives con un argomento di directory. Questa opzione rende l'output del compilatore un file separato *.module.json per ogni file di origine. Se si specifica un singolo argomento nome file, due istanze del compilatore potrebbero tentare di aprire il file di output contemporaneamente e causare un errore. L'uso di /MP con per /sourceDependencies:directives- inviare l'output a stdout potrebbe causare risultati interleaved.

Quando si verifica un errore del compilatore non irreversibile, le informazioni sulle dipendenze vengono comunque scritte nel file di output.

Tutti i percorsi di file vengono visualizzati come percorsi assoluti nell'output.

Questa opzione può essere usata con /translateInclude.

Esempi

Dato il codice di esempio seguente:

//main.cpp:
#include <vector>

import m;
import std.core;

import <utility>;

import "t.h";

int main() {}

Questa riga di comando seguente:

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

produce un file output.json JSON simile a:

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

Per brevità, l'esempio precedente usa ... per abbreviare i percorsi segnalati. Il report contiene i percorsi assoluti. I percorsi segnalati dipendono dalla posizione in cui il compilatore trova le dipendenze. Se i risultati sono imprevisti, potrebbe essere necessario controllare le impostazioni del percorso di inclusione del progetto.

ProvidedModule elenca i nomi delle partizioni del modulo o del modulo esportati.

Nell'output non .ifc sono elencati file perché non sono stati compilati. A differenza di /sourceDependencies, il compilatore non produce output compilato quando /sourceDependencies:directives viene specificato, quindi non vengono generati moduli compilati o unità di intestazione.

Per impostare questa opzione del compilatore in Visual Studio

In genere non è consigliabile impostare questa opzione nell'ambiente di sviluppo di Visual Studio. Viene impostato dal sistema di compilazione.

Vedi anche

/translateInclude
Informazioni di riferimento su header-units.json per C++
Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC
/scanDependencies (Elencare le dipendenze del modulo in formato standard)
/sourceDependencies (Elencare tutte le dipendenze a livello di origine)