Delen via


/sourceDependencies:directives (Afhankelijkheden van module- en headereenheden weergeven)

Met deze opdrachtregeloptie scant u bronbestanden en de bijbehorende #include instructies om een JSON-bestand te genereren waarin de module wordt geëxporteerd en geïmporteerd. Een buildsysteem kan deze informatie gebruiken om de buildvolgorde van modules en header-eenheden te bepalen.

Deze optie verschilt van /sourceDependencies op de volgende manieren:

  • De compiler produceert geen gecompileerde uitvoer. Er worden geen gecompileerde code, modules of header-eenheden geproduceerd. In plaats daarvan worden de bestanden gescand op modulerichtlijnen.
  • De JSON-indeling verschilt van wat /sourceDependencies produceert. De /sourceDependencies optie is bedoeld voor gebruik met andere buildhulpprogramma's, zoals CMake.
  • In het JSON-uitvoerbestand worden geen geïmporteerde modules en geïmporteerde headereenheden (.ifc bestanden) vermeld omdat met deze optie een scan wordt uitgevoerd van de projectbestanden, niet van een compilatie. Er zijn dus geen ingebouwde modules of header-eenheden om weer te geven.
  • Alleen rechtstreeks geïmporteerde modules of kopteksteenheden worden weergegeven. De afhankelijkheden van de geïmporteerde modules of kopteksteenheden zelf worden niet weergegeven.
  • Afhankelijkheden van headerbestanden worden niet vermeld. Dat wil gezegd, #include <file> of #include "file" afhankelijkheden worden niet vermeld.
  • /sourceDependencies:directives is bedoeld om te worden gebruikt voordat .ifc bestanden worden gebouwd.
  • /sourceDependencieszorgt ervoor dat de compiler alle bestanden rapporteert, zoals #includes.pch bestanden, .ifc bestanden, bestanden, enzovoort, die zijn gebruikt voor een bepaalde vertaaleenheid, terwijl /sourceDependencies:directives [file1] het opgegeven bronbestand en alle importexport instructies worden gescand. /sourceDependencies kan worden gebruikt met /sourceDependencies:directives.

Syntaxis

/sourceDependencies:directives-
/sourceDependencies:directives bestandsnaam
/sourceDependencies:directives map

Argumenten

-
Als er één streepje is opgegeven, verzendt de compiler de bronafhankelijkheden JSON naar stdoutof naar de locatie waar de compileruitvoer wordt omgeleid.

filename
De compiler schrijft de uitvoer van de bronafhankelijkheid naar de opgegeven bestandsnaam, die mogelijk een relatief of absoluut pad bevat. Het bestand wordt gemaakt als het niet bestaat.

directory
Als het argument een map is, genereert de compiler bronafhankelijkheidsbestanden in de opgegeven map. De map moet bestaan of het argument wordt behandeld als een filename. De naam van het uitvoerbestand is gebaseerd op de volledige naam van het invoerbestand, met een toegevoegde .json extensie. Als het bestand dat aan de compiler is verstrekt, bijvoorbeeld main.cpp, is de gegenereerde uitvoerbestandsnaam main.cpp.json.

Opmerkingen

/sourceDependencies:directives is beschikbaar vanaf Visual Studio 2019 versie 16.10.

Wanneer u de /MP compileroptie (Compileren met meerdere processen) opgeeft, wordt u aangeraden een mapargument te gebruiken /sourceDependencies:directives . Met deze optie maakt de compiler een afzonderlijk *.module.json bestand voor elk bronbestand. Als u één bestandsnaamargument opgeeft, kunnen twee exemplaren van de compiler proberen het uitvoerbestand tegelijkertijd te openen en een fout te veroorzaken. Het gebruik van /MP met /sourceDependencies:directives- om uitvoer te verzenden, stdout kan interleaved resultaten veroorzaken.

Wanneer er een niet-fatale compilerfout optreedt, wordt de afhankelijkheidsinformatie nog steeds naar het uitvoerbestand geschreven.

Alle bestandspaden worden weergegeven als absolute paden in de uitvoer.

Deze schakelaar kan worden gebruikt met /translateInclude.

Voorbeelden

Gegeven de volgende voorbeeldcode:

//main.cpp:
#include <vector>

import m;
import std;
import <utility>;
import "t.h";

int main() {}

Deze volgende opdrachtregel:

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

produceert een JSON-bestand output.json dat vergelijkbaar is met:

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

Voor kortheid gebruikt het vorige voorbeeld ... om de gerapporteerde paden te verkorten. Het rapport bevat de absolute paden. De gerapporteerde paden zijn afhankelijk van waar de compiler de afhankelijkheden vindt. Als de resultaten onverwacht zijn, kunt u de padinstellingen van uw project controleren.

ProvidedModule bevat geëxporteerde module- of modulepartitienamen.

Er worden geen .ifc bestanden weergegeven in de uitvoer omdat ze niet zijn gebouwd. In tegenstelling tot /sourceDependencies, produceert de compiler geen gecompileerde uitvoer wanneer /sourceDependencies:directives deze is opgegeven, dus er worden geen gecompileerde modules of header-eenheden geproduceerd.

Deze compileroptie instellen in Visual Studio

Normaal gesproken moet u deze optie niet zelf instellen in de Ontwikkelomgeving van Visual Studio. Het buildsysteem stelt het in.

Zie ook

De C++-standaardbibliotheek importeren met behulp van modules
/translateInclude
C++ header-units.json verwijzing
MSVC-compileropties
opdrachtregelsyntaxis van MSVC-compiler
/scanDependencies (Afhankelijkheden van lijstmodules in standaardvorm)
/sourceDependencies (Alle afhankelijkheden op bronniveau weergeven)