/scanDependencies (Elencare le dipendenze del modulo in formato standard)

Questa opzione del compilatore genera un file JSON che elenca le dipendenze del modulo e dell'unità di intestazione in base alla proposta P1689R5 Format for describing dependencies of source filesstandard C++.

Sintassi

/scanDependencies-
/scanDependencies filename
/scanDependencies directory

Argomenti

-
Se viene fornito il trattino singolo, il compilatore genera le dipendenze di origine JSON a stdouto a dove viene reindirizzato l'output del compilatore.

filename
Il compilatore scrive l'output della dipendenza di origine nel nome file specificato, che può includere un percorso relativo o assoluto. Se il file non esiste, verrà creato.

directory
Se l'argomento è una directory, il compilatore genera file di dipendenza di origine nella directory specificata. La directory deve esistere oppure l'argomento viene considerato come .filename Il nome del file di output si basa sul nome completo del file di input, con un'estensione aggiunta .module.json . Ad esempio, se il file fornito al compilatore è main.cpp, il nome file di output generato è main.cpp.module.json.

Osservazioni:

L'opzione del /scanDependencies compilatore identifica le dipendenze, i moduli e le unità di intestazione da compilare prima di poter compilare il progetto che li usa. Ad esempio, elenca import <library>; o import "library"; come dipendenza dell'unità di intestazione e import name; come dipendenza del modulo. Lo scopo è fornire queste informazioni in un formato comune utilizzabile dagli strumenti di compilazione, ad esempio CMake. Per segnalare le dipendenze del modulo e dell'unità di intestazione, è necessario compilare anche usando /std:c++20 o versione successiva.

Questa opzione della riga di comando è simile a /sourceDependencies:directives e /sourceDependencies, ma differisce nei modi seguenti:

  • L'output usa lo P1689R5 schema, anziché lo schema specifico di Microsoft generato da /sourceDependencies:directives.
  • A differenza di /sourceDependencies, il compilatore non produce output compilato. I file vengono invece analizzati per individuare le direttive del modulo. Non vengono prodotti codice, moduli o unità di intestazione compilati.
  • Il file JSON di output non elenca i moduli importati e le unità di intestazione importate (.ifc file) perché questa opzione analizza solo i file di progetto. Non sono presenti moduli compilati o unità di intestazione da elencare.
  • Vengono elencati solo i moduli o le unità di intestazione direttamente importati. Non elenca le dipendenze dei moduli importati o delle unità di intestazione stesse.
  • I file di intestazione inclusi in modo testuale, ad #include <file> esempio o #include "file" non sono elencati come dipendenze, a meno che non siano tradotti in un'unità di intestazione usando l'opzione /translateInclude .
  • /scanDependencies deve essere usato prima della .ifc compilazione dei file.

/scanDependencies è disponibile a partire da Visual Studio 2022 versione 17.2. Non è abilitato per impostazione predefinita.

Quando si specifica l'opzione del /MP compilatore (Compilazione con più processi), è consigliabile usare /scanDependencies con un argomento di directory. Se si specifica un singolo argomento nome file, due istanze del compilatore potrebbero tentare di aprire il file di output contemporaneamente e causare un errore. L'uso di /MP con per /scanDependencies- inviare l'output a stdout potrebbe causare risultati interleaved.

Quando si verifica un errore del compilatore non irreversibile, le informazioni sulle dipendenze vengono comunque scritte nel file di output.

Tutti i percorsi di file vengono visualizzati come percorsi assoluti nell'output.

Per informazioni dettagliate sul formato e sullo schema usati nel file JSON di output, vedere la P1689R5 sezione 6.

Esempi

Si consideri l’esempio di codice seguente:

//app.cpp:
#include <vector>

import other.module;
import std.core;

import "t.h";

import <iostream>;

int main() {}

È possibile usare questa riga di comando per segnalare le dipendenze in app.cpp:

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

Il compilatore produce un file JSON, output.json, con contenuto simile al seguente:

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

È stato usato ... per abbreviare i percorsi segnalati. Il report contiene i percorsi assoluti. I percorsi segnalati dipendono dalla posizione in cui il compilatore trova le dipendenze. Se i risultati sono imprevisti, è possibile controllare le impostazioni del percorso di inclusione del progetto.

Nell'output non .ifc sono elencati file perché non sono stati compilati. A differenza di /sourceDependencies, il compilatore non produce output compilato quando /scanDependencies viene specificato, quindi non vengono generati moduli compilati o unità di intestazione da importare.

Per impostare questa opzione del compilatore in Visual Studio

In genere non è consigliabile impostare l'opzione /scanDependencies nell'ambiente di sviluppo di Visual Studio. Il compilatore non genera file oggetto quando si imposta questa opzione, che rende il passaggio di collegamento negativo e segnala un errore.

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per altre informazioni, vedere Impostare le proprietà del compilatore e della compilazione.

  2. Selezionare la pagina delle proprietà Proprietà di configurazione>C/C++>Riga di comando.

  3. Modificare la proprietà Opzioni aggiuntive per aggiungere /scanDependencies- o /scanDependencies "pathname", dove "pathname" fa riferimento a una directory per l'output.

  4. Scegli OK per salvare le modifiche.

Per segnalare le dipendenze del modulo e dell'unità di intestazione, è necessario impostare anche la proprietà Standard del linguaggio C++ Generale>delle>proprietà di configurazione su ISO C++20 Standard o versione successiva.

Per impostare l'opzione del compilatore a livello di codice

Vedi anche

Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC
/sourceDependencies:directives
/sourceDependencies
/std (Specificare la versione standard della lingua)
/translateInclude