/sourceDependencies:directives (Répertorier les dépendances de module et d’unité d’en-tête)

Cette option de ligne de commande analyse les fichiers sources et leurs #include instructions pour générer un fichier JSON qui répertorie l’exportation et les importations du module. Ces informations peuvent être utilisées par un système de build pour déterminer l’ordre de génération des modules et des unités d’en-tête.

Cette option diffère des /sourceDependencies méthodes suivantes :

  • Le compilateur ne produit pas de sortie compilée. Aucun code, modules ou unités d’en-tête compilés n’est généré. Au lieu de cela, les fichiers sont analysés pour les directives de module.
  • Le format JSON est différent de ce qui /sourceDependencies produit. L’option /sourceDependencies est destinée à être utilisée avec d’autres outils de génération, tels que CMake.
  • Le fichier JSON de sortie ne répertorie pas les modules importés et les unités d’en-tête importées (.ifc fichiers), car cette option effectue une analyse des fichiers projet, et non une compilation. Il n’y a donc pas de modules ou d’unités d’en-tête générés à répertorier.
  • Seuls les modules ou unités d’en-tête directement importés sont répertoriés. Elle ne répertorie pas les dépendances des modules importés ou des unités d’en-tête elles-mêmes.
  • Les dépendances de fichier d’en-tête ne sont pas répertoriées. Autrement dit, #include <file> ou #include "file" les dépendances ne sont pas répertoriées.
  • /sourceDependencies:directives est destiné à être utilisé avant .ifc la génération de fichiers.
  • /sourceDependenciesprovoque l’état de tous les fichiers, tels que #includes, fichiers, .ifc fichiers, etc. utilisés pour une unité de traduction particulière, tandis que /sourceDependencies:directives [file1] l’analyse du fichier source et signale toutes et import export .pch instructions spécifiées. /sourceDependencies peut être utilisé avec /sourceDependencies:directives.

Syntaxe

/sourceDependencies:directives-
/sourceDependencies:directives filename
/sourceDependencies:directivesrépertoire

Arguments

-
Si le tiret unique est fourni, le compilateur émet les dépendances sources JSON vers stdout, ou vers l’emplacement où la sortie du compilateur est redirigée.

filename
Le compilateur écrit la sortie de dépendance source dans le nom de fichier spécifié, qui peut inclure un chemin relatif ou absolu. Le fichier est créé s’il n’existe pas.

directory
Si l’argument est un répertoire, le compilateur génère des fichiers de dépendance source dans le répertoire spécifié. Le répertoire doit exister, ou l’argument est traité comme un filename. Le nom du fichier de sortie est basé sur le nom complet du fichier d’entrée, avec une extension ajoutée .json . Par exemple, si le fichier fourni au compilateur est main.cpp, le nom de fichier de sortie généré est main.cpp.json.

Notes

/sourceDependencies:directives est disponible à partir de Visual Studio 2019 version 16.10.

Lorsque vous spécifiez l’option de /MP compilateur (Générer avec plusieurs processus), nous vous recommandons d’utiliser /sourceDependencies:directives avec un argument de répertoire. Cette option permet au compilateur de générer un fichier distinct *.module.json pour chaque fichier source. Si vous fournissez un seul argument de nom de fichier, deux instances du compilateur peuvent tenter d’ouvrir le fichier de sortie simultanément et provoquer une erreur. L’utilisation de l’option /MP avec /sourceDependencies:directives- laquelle envoyer la sortie stdout peut entraîner des résultats entrelacés.

Lorsqu’une erreur de compilateur non irrécupérable se produit, les informations de dépendance sont toujours écrites dans le fichier de sortie.

Tous les chemins d’accès de fichier apparaissent sous forme de chemins absolus dans la sortie.

Ce commutateur peut être utilisé avec /translateInclude.

Exemples

Étant donné l’exemple de code suivant :

//main.cpp:
#include <vector>

import m;
import std.core;

import <utility>;

import "t.h";

int main() {}

Cette ligne de commande suivante :

cl /std:c++latest /translateInclude /sourceDependencies:directives output.json main.cpp

produit un fichier output.json JSON similaire à :

{
   "Version":"1.1",
   "Data":{
      "Source":"C:\\a\\b\\main.cpp",
      "ProvidedModule":"",
      "ImportedModules":[
         "m",
         "std.core"
      ],
      "ImportedHeaderUnits":[
         "C:\\...\\utility",
         "C:\\a\\b\\t.h"
      ]
   }
}

Pour la concision, l’exemple précédent utilise ... pour abrégér les chemins signalés. Le rapport contient les chemins absolus. Les chemins signalés dépendent de l’emplacement où le compilateur trouve les dépendances. Si les résultats sont inattendus, vous souhaiterez peut-être vérifier les paramètres de chemin d’accès inclus de votre projet.

ProvidedModule répertorie les noms de partition de module ou de module exportés.

Aucun fichier n’est .ifc répertorié dans la sortie, car ils n’ont pas été générés. Contrairement /sourceDependenciesà , le compilateur ne produit pas de sortie compilée lorsqu’il /sourceDependencies:directives est spécifié. Par conséquent, aucun module ou unité d’en-tête compilé n’est généré.

Pour définir cette option de compilateur dans Visual Studio

Vous ne devez normalement pas définir cette option vous-même dans l’environnement de développement Visual Studio. Il est défini par le système de build.

Voir aussi

/translateInclude
Référence header-units.json C++
Options du compilateur MSVC
Syntaxe de ligne de commande du compilateur MSVC
/scanDependencies (Répertorier les dépendances de module sous forme standard)
/sourceDependencies (Répertorier toutes les dépendances au niveau source)