/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 files
jazyka C++.
Syntaxe
/scanDependencies-
/scanDependencies
filename
/scanDependencies
directory
Argumenty
-
Pokud je k dispozici jedna pomlčka, kompilátor vygeneruje zdrojové závislosti JSON do stdout
umí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
/sourceDependencies
toho 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.json
JSON 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 /sourceDependencies
toho 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.
Otevřete dialogové okno Stránky vlastností projektu. Další informace naleznete v tématu Nastavení vlastností kompilátoru a sestavení.
Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.
Upravte vlastnost Další možnosti pro přidání
/scanDependencies-
nebo/scanDependencies "pathname"
, kde"pathname"
odkazuje na adresář pro výstup.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 třída AdditionalOptions.
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