Sdílet prostřednictvím


/scanDependencies (Výpis závislostí modulů ve standardním formátu)

Tato možnost kompilátoru vygeneruje soubor JSON, který uvádí závislosti modulů a jednotek hlaviček podle standardního návrhu P1689R5 Format for describing dependencies of source filesjazyka C++.

Syntaxe

/scanDependencies-
/scanDependencies filename
/scanDependencies directory

Argumenty

-
Pokud je k dispozici jedna pomlčka, kompilátor vygeneruje zdrojové závislosti JSON do stdoutumístění přesměrování výstupu kompilátoru.

filename
Kompilátor zapíše výstup zdrojové závislosti do zadaného názvu souboru, který může obsahovat relativní nebo absolutní cestu. Pokud soubor neexistuje, je vytvořen.

directory
Pokud je argument adresářem, kompilátor vygeneruje zdrojové soubory závislostí v zadaném adresáři. Adresář musí existovat nebo je argument považován za filename. Název výstupního souboru je založený na úplném názvu vstupního souboru s připojenou .module.json příponou. Pokud je například soubor poskytnutý kompilátoru main.cpp, vygenerovaný výstupní název souboru je main.cpp.module.json.

Poznámky

Možnost /scanDependencies kompilátoru určuje, které závislosti, moduly a jednotky hlaviček je nutné zkompilovat, než budete moct zkompilovat projekt, který je používá. Například vypíše import <library>; nebo import "library"; jako závislost jednotky záhlaví a import name; jako závislost modulu. Záměrem je poskytnout tyto informace v běžném formátu, který lze použít pomocí nástrojů sestavení, jako je CMake. Pokud chcete sestavovat moduly a závislosti jednotek hlaviček, musíte je také zkompilovat pomocí /std:c++20 nebo novějšího.

Tato možnost příkazového řádku je podobná /sourceDependencies:directives a /sourceDependencies, ale liší se následujícími způsoby:

  • Výstup používá P1689R5 schéma místo schématu specifického pro Microsoft vygenerované ./sourceDependencies:directives
  • Na rozdíl od /sourceDependenciestoho kompilátor nevygeneruje zkompilovaný výstup. Místo toho se prohledají direktivy modulu. Neprodukují se žádné kompilované kódy, moduly ani jednotky hlaviček.
  • Výstupní soubor JSON nevypisuje importované moduly a importované jednotky hlaviček (.ifc soubory), protože tato možnost prohledá pouze soubory projektu. Nejsou k dispozici žádné sestavené moduly ani jednotky hlaviček, které by bylo potřeba vypsat.
  • Jsou uvedeny pouze přímo importované moduly nebo jednotky hlaviček. Nevypisuje závislosti importovaných modulů ani samotných jednotek hlaviček.
  • Textové zahrnutí souborů hlaviček, jako #include <file> jsou nebo #include "file" nejsou uvedené jako závislosti, pokud nejsou přeloženy do jednotky záhlaví pomocí /translateInclude této možnosti.
  • /scanDependencies je určen k použití před .ifc sestavením souborů.

/scanDependencies je k dispozici od sady Visual Studio 2022 verze 17.2. Ve výchozím nastavení není povolená.

Při zadávání možnosti kompilátoru /MP (Sestavení s více procesy) doporučujeme použít /scanDependencies s argumentem adresáře. Pokud zadáte jeden argument názvu souboru, mohou se dvě instance kompilátoru pokusit otevřít výstupní soubor současně a způsobit chybu. /MP/scanDependencies- Použití příkazu k odeslání výstupu stdout může způsobit prokládání výsledků.

Pokud dojde k chybě nevýkonného kompilátoru, informace o závislostech se stále zapíšou do výstupního souboru.

Všechny cesty k souborům se ve výstupu zobrazují jako absolutní cesty.

Podrobnosti o formátu a schématu použitém ve výstupním souboru JSON najdete P1689R5 v části 6.

Příklady

Představte si následující ukázkový kód:

//app.cpp:
#include <vector>

import other.module;
import std.core;

import "t.h";

import <iostream>;

int main() {}

Tento příkazový řádek můžete použít k hlášení závislostí v app.cpp:

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

Kompilátor vytvoří soubor output.jsonJSON s podobným obsahem:

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

Použili ... jsme zkratku ohlášených cest. Sestava obsahuje absolutní cesty. Ohlášené cesty závisí na tom, kde kompilátor najde závislosti. Pokud jsou výsledky neočekávané, můžete zkontrolovat nastavení cesty zahrnutí projektu.

Ve výstupu nejsou uvedené žádné .ifc soubory, protože nebyly sestaveny. Na rozdíl od /sourceDependenciestoho kompilátor při zadání nevygeneruje zkompilovaný výstup /scanDependencies , takže se pro import nevygenerují žádné kompilované moduly ani jednotky hlaviček.

Nastavení této možnosti kompilátoru v sadě Visual Studio

Normálně byste neměli nastavit /scanDependencies možnost ve vývojovém prostředí sady Visual Studio. Kompilátor při nastavení této možnosti negeneruje soubory objektů, což způsobí selhání kroku propojení a nahlášení chyby.

  1. Otevřete dialogové okno Stránky vlastností projektu. Další informace naleznete v tématu Nastavení vlastností kompilátoru a sestavení.

  2. Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.

  3. Upravte vlastnost Další možnosti pro přidání /scanDependencies- nebo /scanDependencies "pathname", kde "pathname" odkazuje na adresář pro výstup.

  4. Kliknutím na OK uložte provedené změny.

Chcete-li hlásit modul a závislosti jednotek hlaviček, musíte také nastavit vlastnost Vlastnosti konfigurace>Obecné>jazyk C++ standardu jazyka C++ na ISO C++20 Standard nebo novější.

Programové nastavení tohoto parametru kompilátoru

Viz také

Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC
/sourceDependencies:directives
/sourceDependencies
/std (Určení standardní verze jazyka)
/translateInclude