/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./sourceDependencies
fa 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 leimport
istruzioni eexport
.pch
./sourceDependencies
può essere usato con/sourceDependencies:directives
.
/sourceDependencies:directives-
/sourceDependencies:directives
Filename
/sourceDependencies:directives
directory
-
Se viene fornito il trattino singolo, il compilatore genererà le dipendenze di origine JSON a stdout
o 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
.
/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
.
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.
In genere non è consigliabile impostare questa opzione nell'ambiente di sviluppo di Visual Studio. Viene impostato dal sistema di compilazione.
/translateInclude
Informazioni di riferimento sulle header-units.json 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)