Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Met deze compileroptie wordt een JSON-bestand gegenereerd waarin module- en header-eenheidsafhankelijkheden worden vermeld volgens het C++ Standard-voorstel P1689R5 Format for describing dependencies of source files.
Syntaxis
/scanDependencies-
/scanDependenciesfilename
/scanDependenciesdirectory
Argumenten
-
Als er één streepje wordt 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 .module.json extensie. Als het bestand dat aan de compiler is verstrekt, bijvoorbeeld main.cpp, is de gegenereerde uitvoerbestandsnaam main.cpp.module.json.
Opmerkingen
Met de /scanDependencies compileroptie wordt aangegeven welke afhankelijkheden, modules en header-eenheden moeten worden gecompileerd voordat u het project kunt compileren dat deze gebruikt. Het bevat bijvoorbeeld een lijst import <library>; of import "library"; als een afhankelijkheid van een header-eenheid en import name; als moduleafhankelijkheid. De bedoeling is om deze informatie te verstrekken in een gemeenschappelijke indeling die kan worden gebruikt door buildhulpprogramma's zoals CMake. Als u afhankelijkheden van module- en headereenheden wilt rapporteren, moet u ook compileren met behulp /std:c++20 van of hoger.
Deze opdrachtregeloptie is vergelijkbaar met /sourceDependencies:directives en /sourceDependencies, maar verschilt op de volgende manieren:
- De uitvoer maakt gebruik van het
P1689R5schema, in plaats van het Microsoft-specifieke schema dat wordt gegenereerd door/sourceDependencies:directives. - In tegenstelling tot
/sourceDependencies, produceert de compiler geen gecompileerde uitvoer. In plaats daarvan worden de bestanden gescand op modulerichtlijnen. Er worden geen gecompileerde code, modules of header-eenheden geproduceerd. - In het JSON-uitvoerbestand worden geen geïmporteerde modules en geïmporteerde headereenheden (
.ifcbestanden) vermeld, omdat met deze optie alleen de projectbestanden worden gescand. Er zijn 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.
- Koptekstbestanden zoals
#include <file>of#include "file"worden niet als afhankelijkheden weergegeven, tenzij ze zijn vertaald naar een header-eenheid met behulp van de/translateIncludeoptie. -
/scanDependenciesis bedoeld om te worden gebruikt voordat.ifcbestanden worden gebouwd.
/scanDependencies is beschikbaar vanaf Visual Studio 2022 versie 17.2. Deze functie is niet standaard ingeschakeld.
Wanneer u de /MP compileroptie (Compileren met meerdere processen) opgeeft, wordt u aangeraden een mapargument te gebruiken /scanDependencies . 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 /scanDependencies- 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.
Zie P1689R5 sectie 6 voor meer informatie over de indeling en het schema dat wordt gebruikt in het JSON-uitvoerbestand.
Voorbeelden
Bekijk de volgende voorbeeldcode:
//app.cpp:
#include <vector>
import other.module;
import std;
import "t.h";
import <iostream>;
int main() {}
U kunt deze opdrachtregel gebruiken om afhankelijkheden te rapporteren in app.cpp:
cl /std:c++latest /scanDependencies output.json app.cpp
De compiler produceert een JSON-bestand, output.jsonmet inhoud die vergelijkbaar is met:
{
"version": 1,
"revision": 0,
"rules": [
{
"primary-output": "app.obj",
"outputs": [
"output.json"
],
"requires": [
{
"logical-name": "other.module"
},
{
"logical-name": "std"
},
{
"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
}
]
}
]
}
We hebben de ... gerapporteerde paden afgekort. 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.
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 /scanDependencies deze is opgegeven, dus er worden geen gecompileerde modules of header-eenheden geproduceerd om te importeren.
Deze compileroptie instellen in Visual Studio
Normaal gesproken moet u de /scanDependencies optie niet instellen in de Ontwikkelomgeving van Visual Studio. De compiler genereert geen objectbestanden wanneer u deze optie instelt, waardoor de koppelingsstap mislukt en een fout rapporteert.
Open het dialoogvenster eigenschappenpagina's van het project. Zie Eigenschappen van compiler en build instellen voor meer informatie.
Selecteer de eigenschappenpagina configuratie-eigenschappen>C/C++>opdrachtregel.
Wijzig de eigenschap Aanvullende opties om toe te voegen
/scanDependencies-of/scanDependencies "pathname", waar"pathname"wordt verwezen naar een map voor uitvoer.Kies OK- om uw wijzigingen op te slaan.
Als u afhankelijkheden van module- en headereenheden wilt rapporteren, moet u ook de eigenschapAlgemene>C++ taalstandaard voor > instellen op ISO C++20 Standard of hoger.
Deze compileroptie programmatisch instellen
- Zie AdditionalOptions.
Zie ook
De C++-standaardbibliotheek importeren met behulp van modules
MSVC-compileropties
opdrachtregelsyntaxis van MSVC-compiler
/sourceDependencies:directives
/sourceDependencies
/std (Taalstandaardversie opgeven)
/translateInclude