/sourceDependencies:directives
(Abhängigkeiten von Listenmodulen und Kopfzeileneinheiten)
Diese Befehlszeilenoption überprüft Quelldateien und deren #include
Anweisungen, um eine JSON-Datei zu generieren, in der Modulexporte und -importe aufgelistet sind. Diese Informationen können von einem Buildsystem verwendet werden, um die Buildreihenfolge von Modulen und Headereinheiten zu bestimmen.
Diese Option unterscheidet sich von /sourceDependencies
den folgenden Möglichkeiten:
- Der Compiler erzeugt keine kompilierte Ausgabe. Es werden keine kompilierten Code-, Modul- oder Headereinheiten erstellt. Stattdessen werden die Dateien nach Moduldirektiven gescannt.
- Das JSON-Format unterscheidet sich von dem, was
/sourceDependencies
erzeugt wird. Die/sourceDependencies
Option soll mit anderen Buildtools wie Z. B. CMake verwendet werden. - Die JSON-Ausgabedatei listet keine importierten Module und importierten Headereinheiten (
.ifc
Dateien) auf, da diese Option eine Überprüfung der Projektdateien durchführt, keine Kompilierung. Es gibt also keine integrierten Module oder Kopfzeileneinheiten für die Liste. - Es werden nur direkt importierte Module oder Kopfzeileneinheiten aufgelistet. Es werden nicht die Abhängigkeiten der importierten Module oder Headereinheiten selbst aufgeführt.
- Headerdateiabhängigkeiten werden nicht aufgeführt. Das heißt,
#include <file>
oder#include "file"
Abhängigkeiten werden nicht aufgeführt. /sourceDependencies:directives
soll verwendet werden, bevor.ifc
Dateien erstellt werden./sourceDependencies
bewirkt, dass der Compiler alle Dateien, z#includes
. B. Dateien.pch
,.ifc
Dateien usw., meldet, die für eine bestimmte Übersetzungseinheit verwendet wurden, während/sourceDependencies:directives [file1]
die angegebene Quelldatei überprüft und alleimport
undexport
Anweisungen gemeldet wird./sourceDependencies
kann mit/sourceDependencies:directives
.
Syntax
/sourceDependencies:directives-
/sourceDependencies:directives
Dateiname
/sourceDependencies:directives
verzeichnis
Argumente
-
Wenn der einzelne Gedankenstrich bereitgestellt wird, gibt der Compiler die Quellabhängigkeiten JSON an stdout
oder an den Ort, an den die Compilerausgabe umgeleitet wird.
filename
Der Compiler schreibt die Quellabhängigkeitsausgabe in den angegebenen Dateinamen, der einen relativen oder absoluten Pfad enthalten kann. Wenn die Datei nicht vorhanden ist, wird sie erstellt.
directory
Wenn das Argument ein Verzeichnis ist, generiert der Compiler Quellabhängigkeitsdateien im angegebenen Verzeichnis. Das Verzeichnis muss vorhanden sein, oder das Argument wird als ein filename
. Der Name der Ausgabedatei basiert auf dem vollständigen Namen der Eingabedatei mit einer angefügten .json
Erweiterung. Wenn die dem Compiler bereitgestellte Datei beispielsweise lautet main.cpp
, lautet main.cpp.json
der generierte Ausgabedateiname .
Hinweise
/sourceDependencies:directives
ab Visual Studio 2019, Version 16.10, verfügbar.
Wenn Sie die /MP
Compileroption (Build mit mehreren Prozessen) angeben, empfehlen wir die Verwendung /sourceDependencies:directives
mit einem Verzeichnisargument. Mit dieser Option wird die Compilerausgabe zu einer separaten *.module.json
Datei für jede Quelldatei. Wenn Sie ein einzelnes Dateinamenargument angeben, versuchen zwei Instanzen des Compilers möglicherweise, die Ausgabedatei gleichzeitig zu öffnen und einen Fehler zu verursachen. Die Verwendung von "Mit/sourceDependencies:directives-
" zum Senden der /MP
Ausgabe stdout
kann zu überlappenden Ergebnissen führen.
Wenn ein nicht schwerwiegender Compilerfehler auftritt, werden die Abhängigkeitsinformationen weiterhin in die Ausgabedatei geschrieben.
Alle Dateipfade werden als absolute Pfade in der Ausgabe angezeigt.
Dieser Schalter kann mit /translateInclude
.
Beispiele
Im folgenden Beispielcode:
//main.cpp:
#include <vector>
import m;
import std.core;
import <utility>;
import "t.h";
int main() {}
Folgende Befehlszeile:
cl /std:c++latest /translateInclude /sourceDependencies:directives output.json main.cpp
erzeugt eine JSON-Datei output.json
ähnlich wie:
{
"Version":"1.1",
"Data":{
"Source":"C:\\a\\b\\main.cpp",
"ProvidedModule":"",
"ImportedModules":[
"m",
"std.core"
],
"ImportedHeaderUnits":[
"C:\\...\\utility",
"C:\\a\\b\\t.h"
]
}
}
Aus Platzgründen wird ...
im vorherigen Beispiel die gemeldeten Pfade gekürzt. Der Bericht enthält die absoluten Pfade. Die gemeldeten Pfade hängen davon ab, wo der Compiler die Abhängigkeiten findet. Wenn die Ergebnisse unerwartet sind, sollten Sie die Pfadeinstellungen Ihres Projekts überprüfen.
ProvidedModule
Liste exportierter Modul- oder Modulpartitionsnamen.
In der Ausgabe sind keine .ifc
Dateien aufgeführt, da sie nicht erstellt wurden. Im Gegensatz dazu /sourceDependencies
erzeugt der Compiler keine kompilierte Ausgabe, wenn /sourceDependencies:directives
angegeben wird, daher werden keine kompilierten Module oder Headereinheiten erstellt.
So legen Sie diese Compileroption in Visual Studio fest
Normalerweise sollten Sie diese Option nicht selbst in der Visual Studio-Entwicklungsumgebung festlegen. Sie wird vom Buildsystem festgelegt.
Siehe auch
/translateInclude
C++-header-units.json-Referenz
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile
/scanDependencies
(Listenmodulabhängigkeiten im Standardformular)
/sourceDependencies
(Alle Abhängigkeiten auf Quellebene auflisten)