Freigeben über


/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 alle import und export 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 stdoutoder 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.jsonder 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 /sourceDependencieserzeugt 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)