Udostępnij za pośrednictwem


/scanDependencies (Wyświetlanie listy zależności modułów w postaci standardowej)

Ta opcja kompilatora generuje plik JSON, który wyświetla listę zależności modułu i jednostki nagłówka zgodnie z propozycją P1689R5 Format for describing dependencies of source filesstandardową języka C++ .

Składnia

/scanDependencies-
/scanDependencies filename
/scanDependencies directory

Argumenty

-
Jeśli zostanie podana pojedyncza kreska, kompilator emituje kod JSON zależności źródłowych do stdout, lub do miejsca przekierowywania danych wyjściowych kompilatora.

filename
Kompilator zapisuje dane wyjściowe zależności źródłowej do określonej nazwy pliku, która może zawierać ścieżkę względną lub bezwzględną. Plik zostanie utworzony, jeśli nie istnieje.

directory
Jeśli argument jest katalogiem, kompilator generuje pliki zależności źródłowych w określonym katalogu. Katalog musi istnieć lub argument jest traktowany filenamejako . Nazwa pliku wyjściowego jest oparta na pełnej nazwie pliku wejściowego z dołączonym .module.json rozszerzeniem. Jeśli na przykład plik podany w kompilatorze to main.cpp, wygenerowana nazwa pliku wyjściowego to main.cpp.module.json.

Uwagi

Opcja /scanDependencies kompilatora określa, które zależności, moduły i jednostki nagłówka muszą zostać skompilowane, zanim będzie można skompilować projekt, który z nich korzysta. Na przykład wyświetla listę import <library>; lub import "library"; jako zależność jednostki nagłówka oraz import name; jako zależność modułu. Celem jest dostarczenie tych informacji w typowym formacie używanym przez narzędzia kompilacji, takie jak CMake. Aby raportować zależności modułu i jednostki nagłówka, należy również skompilować przy użyciu /std:c++20 lub nowszej wersji.

Ta opcja wiersza polecenia jest podobna do /sourceDependencies:directives i /sourceDependencies, ale różni się w następujący sposób:

  • Dane wyjściowe używają schematu P1689R5 zamiast schematu specyficznego dla firmy Microsoft wygenerowanego przez /sourceDependencies:directivesprogram .
  • W przeciwieństwie do /sourceDependenciesprogramu kompilator nie generuje skompilowanych danych wyjściowych. Zamiast tego pliki są skanowane pod kątem dyrektyw modułu. Nie utworzono skompilowanego kodu, modułów ani jednostek nagłówka.
  • Wyjściowy plik JSON nie wyświetla listy zaimportowanych modułów i zaimportowanych jednostek nagłówka (.ifc plików), ponieważ ta opcja skanuje tylko pliki projektu. Brak wbudowanych modułów ani jednostek nagłówka do wyświetlenia.
  • Wyświetlane są tylko bezpośrednio zaimportowane moduły lub jednostki nagłówka. Nie wyświetla on samych zależności zaimportowanych modułów ani jednostek nagłówka.
  • Tekstowo dołączone pliki nagłówkowe, takie jak #include <file> lub #include "file" nie są wymienione jako zależności, chyba że przetłumaczone na jednostkę nagłówka /translateInclude przy użyciu opcji .
  • /scanDependencies jest przeznaczony do użycia przed .ifc skompilowania plików.

/scanDependencies program jest dostępny od wersji 17.2 programu Visual Studio 2022. Nie jest ona domyślnie włączona.

Po określeniu opcji kompilatora (kompilacja /MP z wieloma procesami) zalecamy użycie argumentu /scanDependencies katalogu. Jeśli podasz jeden argument nazwy pliku, dwa wystąpienia kompilatora mogą próbować otworzyć plik wyjściowy jednocześnie i spowodować błąd. Użyj polecenia z /scanDependencies- , /MP aby wysłać dane wyjściowe, aby spowodować stdout przeplatane wyniki.

Gdy wystąpi błąd kompilatora niekrytycznego, informacje o zależności nadal są zapisywane w pliku wyjściowym.

Wszystkie ścieżki plików są wyświetlane jako ścieżki bezwzględne w danych wyjściowych.

Aby uzyskać szczegółowe informacje na temat formatu i schematu używanego w wyjściowym pliku JSON, zobacz P1689R5 sekcję 6.

Przykłady

Rozważmy następujący przykładowy kod:

//app.cpp:
#include <vector>

import other.module;
import std.core;

import "t.h";

import <iostream>;

int main() {}

Tego wiersza polecenia można użyć do raportowania zależności w programie app.cpp:

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

Kompilator tworzy plik JSON z output.jsonzawartością podobną do:

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

Użyliśmy ... skrótu zgłoszonych ścieżek. Raport zawiera ścieżki bezwzględne. Zgłoszone ścieżki zależą od tego, gdzie kompilator znajduje zależności. Jeśli wyniki są nieoczekiwane, warto sprawdzić ustawienia ścieżki dołączania projektu.

Żadne pliki nie .ifc są wyświetlane w danych wyjściowych, ponieważ nie zostały skompilowane. W przeciwieństwie do /sourceDependenciesprogramu kompilator nie generuje skompilowanych danych wyjściowych, gdy /scanDependencies jest określony, więc nie są tworzone skompilowane moduły ani jednostki nagłówka do zaimportowania.

Aby ustawić tę opcję kompilatora w programie Visual Studio

Zwykle nie należy ustawiać /scanDependencies opcji w środowisku projektowym programu Visual Studio. Kompilator nie generuje plików obiektów podczas ustawiania tej opcji, co sprawia, że krok łącza kończy się niepowodzeniem i zgłasza błąd.

  1. Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać więcej informacji, zobacz Ustawianie właściwości kompilatora i kompilacji.

  2. Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.

  3. Zmodyfikuj właściwość Opcje dodatkowe, aby dodać /scanDependencies- element lub /scanDependencies "pathname", gdzie "pathname" odwołuje się do katalogu danych wyjściowych.

  4. Wybierz przycisk OK , aby zapisać zmiany.

Aby raportować zależności modułu i jednostki nagłówka, należy również ustawić właściwość Właściwości>konfiguracji General>C++ Language Standard na ISO C++20 Standard lub nowszy.

Aby programowo ustawić tę opcję kompilatora

Zobacz też

Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC
/sourceDependencies:directives
/sourceDependencies
/std (Określ wersję standardową języka)
/translateInclude