/scanDependencies
(Listenmodulabhängigkeiten im Standardformular)
Diese Compileroption generiert eine JSON-Datei, die Modul- und Headereinheitsabhängigkeiten gemäß dem C++-Standardvorschlag P1689R5 Format for describing dependencies of source files
auflistet.
Syntax
/scanDependencies-
/scanDependencies
filename
/scanDependencies
directory
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 .module.json
Erweiterung. Wenn die dem Compiler bereitgestellte Datei beispielsweise lautet main.cpp
, lautet main.cpp.module.json
der generierte Ausgabedateiname .
Hinweise
Die /scanDependencies
Compileroption identifiziert, welche Abhängigkeiten, Module und Headereinheiten kompiliert werden müssen, bevor Sie das Projekt kompilieren können, das sie verwendet. So wird beispielsweise eine Abhängigkeit der Kopfzeileneinheit und import name;
als Modulabhängigkeit aufgelistet.import <library>;
import "library";
Diese Informationen sollen in einem gängigen Format bereitgestellt werden, das von Buildtools wie CMake verwendet wird. Um Abhängigkeiten von Modul- und Headereinheiten zu melden, müssen Sie auch mithilfe /std:c++20
oder höher kompilieren.
Diese Befehlszeilenoption ähnelt /sourceDependencies:directives
und /sourceDependencies
unterscheidet sich jedoch auf folgende Weise:
- Die Ausgabe verwendet das
P1689R5
Schema anstelle des von Microsoft generierten/sourceDependencies:directives
Schemas. - Im Gegensatz dazu
/sourceDependencies
erzeugt der Compiler keine kompilierte Ausgabe. Stattdessen werden die Dateien nach Moduldirektiven gescannt. Es werden keine kompilierten Code-, Modul- oder Headereinheiten erstellt. - Die JSON-Ausgabedatei listet keine importierten Module und importierten Headereinheiten (
.ifc
Dateien) auf, da diese Option nur die Projektdateien überprüft. Es gibt keine integrierten Module oder Headereinheiten, die auflisten sollen. - Es werden nur direkt importierte Module oder Kopfzeileneinheiten aufgelistet. Es werden nicht die Abhängigkeiten der importierten Module oder Headereinheiten selbst aufgeführt.
- Textbezogene Headerdateien wie
#include <file>
z. B. oder#include "file"
werden nicht als Abhängigkeiten aufgeführt, es sei denn, sie werden mithilfe der/translateInclude
Option in eine Kopfzeileneinheit übersetzt. /scanDependencies
soll verwendet werden, bevor.ifc
Dateien erstellt werden.
/scanDependencies
ab Visual Studio 2022, Version 17.2, verfügbar. Er ist nicht standardmäßig aktiviert.
Wenn Sie die /MP
Compileroption (Build mit mehreren Prozessen) angeben, empfehlen wir die Verwendung /scanDependencies
mit einem Verzeichnisargument. 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/scanDependencies-
" 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.
Ausführliche Informationen zum Format und schema, das in der JSON-Ausgabedatei verwendet wird, finden Sie in P1689R5
Abschnitt 6.
Beispiele
Sehen Sie sich den folgenden Beispielcode an:
//app.cpp:
#include <vector>
import other.module;
import std.core;
import "t.h";
import <iostream>;
int main() {}
Sie können diese Befehlszeile verwenden, um Abhängigkeiten in app.cpp
:
cl /std:c++latest /scanDependencies output.json app.cpp
Der Compiler erzeugt eine JSON-Datei mit output.json
ähnlichem Inhalt:
{
"version": 1,
"revision": 0,
"rules": [
{
"primary-output": "app.obj",
"outputs": [
"C:\\Users\\username\\source\\repos\\app\\app"
],
"requires": [
{
"logical-name": "other.module"
},
{
"logical-name": "std.core"
},
{
"logical-name": "t.h",
"source-path": "C:\\Users\\username\\source\\repos\\app\\app\\t.h",
"lookup-method": "include-quote",
"unique-on-source-path": true
},
{
"logical-name": "iostream",
"source-path": "C:\\Program Files\\...\\include\\iostream",
"lookup-method": "include-angle",
"unique-on-source-path": true
}
]
}
]
}
Wir haben die gemeldeten Pfade früher ...
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.
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 /scanDependencies
angegeben wird, daher werden keine kompilierten Module oder Headereinheiten zum Importieren erstellt.
So legen Sie diese Compileroption in Visual Studio fest
Normalerweise sollten Sie die /scanDependencies
Option in der Visual Studio-Entwicklungsumgebung nicht festlegen. Der Compiler generiert keine Objektdateien, wenn Sie diese Option festlegen, wodurch der Verknüpfungsschritt fehlschlägt und einen Fehler meldet.
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen finden Sie unter Festlegen von Compiler- und Buildeigenschaften.
Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.
Ändern Sie die Eigenschaft "Zusätzliche Optionen ", um sie hinzuzufügen
/scanDependencies-
oder/scanDependencies "pathname"
, wobei"pathname"
auf ein Verzeichnis für die Ausgabe verwiesen wird.Klicken Sie auf OK, um die Änderungen zu speichern.
Wenn Sie Modul- und Headereinheitsabhängigkeiten melden möchten, müssen Sie auch die Standardeigenschaft für Konfigurationseigenschaften>>für C++-Sprachen auf ISO C++20 Standard oder höher festlegen.
So legen Sie diese Compileroption programmgesteuert fest
- Siehe AdditionalOptions.
Siehe auch
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile
/sourceDependencies:directives
/sourceDependencies
/std
(Standardversion für die Sprache festlegen)
/translateInclude