Dela via


/scanDependencies (Lista modulberoenden i standardformulär)

Det här kompileringsalternativet genererar en JSON-fil som visar modul- och rubrikenhetsberoenden enligt C++ Standard-förslaget P1689R5 Format for describing dependencies of source files.

Syntax

/scanDependencies-
/scanDependencies filename
/scanDependencies directory

Argumentpunkter

-
Om det enda strecket tillhandahålls genererar kompilatorn källberoendena JSON till stdouteller till där kompilatorutdata omdirigeras.

filename
Kompilatorn skriver utdata från källberoendet till det angivna filnamnet, som kan innehålla en relativ eller absolut sökväg. Filen skapas om den inte finns.

directory
Om argumentet är en katalog genererar kompilatorn källberoendefiler i den angivna katalogen. Katalogen måste finnas eller så behandlas argumentet som en filename. Namnet på utdatafilen baseras på det fullständiga namnet på indatafilen med ett tillägg som läggs till .module.json . Om filen som tillhandahålls till kompilatorn till exempel är main.cppär main.cpp.module.jsondet genererade utdatafilnamnet .

Anmärkningar

Kompileringsalternativet /scanDependencies identifierar vilka beroenden, moduler och rubrikenheter som måste kompileras innan du kan kompilera projektet som använder dem. Den visar import <library>; till exempel eller import "library"; som ett huvudenhetsberoende och import name; som ett modulberoende. Avsikten är att tillhandahålla den här informationen i ett gemensamt format som kan användas av byggverktyg som CMake. Om du vill rapportera modul- och rubrikenhetsberoenden måste du också kompilera med hjälp /std:c++20 av eller senare.

Det här kommandoradsalternativet liknar /sourceDependencies:directives och /sourceDependencies, men skiljer sig åt på följande sätt:

  • Utdata använder P1689R5 schemat i stället för det Microsoft-specifika schema som genereras av /sourceDependencies:directives.
  • Till skillnad från /sourceDependenciesgenererar kompilatorn inte kompilerade utdata. I stället genomsöks filerna efter moduldirektiv. Ingen kompilerad kod, moduler eller rubrikenheter skapas.
  • JSON-utdatafilen visar inte importerade moduler och importerade rubrikenheter (.ifc filer) eftersom det här alternativet endast söker igenom projektfilerna. Det finns inga inbyggda moduler eller rubrikenheter att lista.
  • Endast direktimporterade moduler eller rubrikenheter visas. Den visar inte beroenden för de importerade modulerna eller själva huvudenheterna.
  • Textbaserade rubrikfiler som #include <file> eller #include "file" visas inte som beroenden om de inte översätts till en rubrikenhet med hjälp /translateInclude av alternativet .
  • /scanDependencies är tänkt att användas innan .ifc filer skapas.

/scanDependencies är tillgängligt från och med Visual Studio 2022 version 17.2. Det är inte aktiverat som standard.

När du anger kompilatoralternativet /MP (Skapa med flera processer) rekommenderar vi att du använder /scanDependencies med ett katalogargument. Om du anger ett enda filnamnsargument kan två instanser av kompilatorn försöka öppna utdatafilen samtidigt och orsaka ett fel. Användning av /MP med /scanDependencies- för att skicka utdata till stdout kan orsaka interfolierade resultat.

När ett icke-allvarligt kompilatorfel inträffar skrivs beroendeinformationen fortfarande till utdatafilen.

Alla filsökvägar visas som absoluta sökvägar i utdata.

Mer information om det format och schema som används i JSON-utdatafilen P1689R5 finns i avsnitt 6.

Exempel

Överväg följande exempelkod:

//app.cpp:
#include <vector>

import other.module;
import std;
import "t.h";
import <iostream>;

int main() {}

Du kan använda den här kommandoraden för att rapportera beroenden i app.cpp:

cl /std:c++latest /scanDependencies output.json app.cpp

Kompilatorn skapar en JSON-fil, , output.jsonmed innehåll som liknar:

{
    "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
                }
            ]
        }
    ]
}

Vi har använt ... för att förkorta de rapporterade sökvägarna. Rapporten innehåller de absoluta sökvägarna. De sökvägar som rapporteras beror på var kompilatorn hittar beroendena. Om resultatet är oväntat kanske du vill kontrollera projektets inställningar för inkluderad sökväg.

Inga .ifc filer visas i utdata eftersom de inte har skapats. Till skillnad från /sourceDependenciesproducerar kompilatorn inte kompilerade utdata när /scanDependencies det anges, så inga kompilerade moduler eller rubrikenheter skapas för import.

Ange det här kompilatoralternativet i Visual Studio

Du bör normalt inte ange alternativet /scanDependencies i Visual Studio-utvecklingsmiljön. Kompilatorn genererar inte objektfiler när du anger det här alternativet, vilket gör att länksteget misslyckas och rapporterar ett fel.

  1. Öppna dialogrutan egenskapssidor för projektet. Mer information finns i Ange kompilator- och byggegenskaper.

  2. Välj egenskapssidan Konfigurationsegenskaper>C/C++>kommandorad.

  3. Ändra egenskapen Ytterligare alternativ för att lägga /scanDependencies- till eller /scanDependencies "pathname", där "pathname" refererar till en katalog för utdata.

  4. Välj OK för att spara ändringarna.

Om du vill rapportera modul- och rubrikenhetsberoenden måste du också ange egenskapen Konfigurationsegenskaper>Allmän>C++ Language Standard till ISO C++20 Standard eller senare.

Så här ställer du in det här kompilatoralternativet programmatiskt

Se även

Importera C++-standardbiblioteket med hjälp av moduler
MSVC-kompilatoralternativ
kommandoradssyntax för MSVC-kompilatorn
/sourceDependencies:directives
/sourceDependencies
/std (Ange språkstandardversion)
/translateInclude