Compartir a través de


/sourceDependencies:directives (Enumerar dependencias de módulo y unidad de encabezado)

Esta opción de línea de comandos examina los archivos de origen y sus instrucciones #include para generar un archivo JSON que enumera las exportaciones e importaciones del módulo. Un sistema de compilación puede usar esta información para determinar el orden de compilación de los módulos y las unidades de encabezado.

Esta opción es diferente a /sourceDependencies en estos aspectos:

  • El compilador no genera una salida compilada. No se genera código, módulos ni unidades de encabezado compilados. En su lugar, las directivas de módulo se buscan en los archivos.
  • El formato JSON es diferente a lo que /sourceDependencies genera. La opción /sourceDependencies está pensada para usarse con otras herramientas de compilación, como CMake.
  • En el archivo JSON de salida no se enumeran los módulos ni las unidades de encabezado importados (archivos .ifc) porque esta opción solo examina los archivos del proyecto, no una compilación. Por tanto, no hay ningún módulo ni unidad de encabezado compilados que enumerar.
  • Solo se muestran los módulos o unidades de encabezado importados directamente. No se enumeran las dependencias de los módulos importados ni de las unidades de encabezado en sí.
  • Tampoco se enumeran las dependencias del archivo de encabezado. Así pues, no se enumeran las dependencias #include <file> o #include "file".
  • /sourceDependencies:directives está pensado para usarse antes de que se compilen los archivos .ifc.
  • /sourceDependencies hace que el compilador notifique todos los archivos, como los archivos #includes, .pch, .ifc y otros, que se hayan usado para una unidad de traducción determinada, mientras que /sourceDependencies:directives [file1] examina el archivo de origen especificado y notifica todas las instrucciones import y export. /sourceDependencies puede usarse con /sourceDependencies:directives.

Sintaxis

/sourceDependencies:directives-
/sourceDependencies:directives nombredearchivo
/sourceDependencies:directives directory

Argumentos

-
Si se proporciona el guión único, el compilador emite las dependencias de origen JSON hacia stdout o hacia donde se redirija la salida del compilador.

filename
El compilador escribe la salida de la dependencia de origen en el nombre de archivo especificado, que puede incluir una ruta de acceso relativa o absoluta. Si el archivo no existe, se creará.

directory
Si el argumento es un directorio, el compilador genera archivos de dependencia de origen en el directorio especificado. El directorio debe existir. De lo contrario, el argumento se tratará como filename. El nombre del archivo de salida se basa en el nombre completo del archivo de entrada, con una extensión .json anexada. Por ejemplo, si el archivo proporcionado al compilador es main.cpp, el nombre de archivo de salida generado será main.cpp.json.

Comentarios

/sourceDependencies:directives está disponible a partir de la versión 16.10 de Visual Studio 2019.

Al especificar la opción del compilador /MP (Compilar con varios procesos), se recomienda usar /sourceDependencies:directives con un argumento de directorio. Esta opción hace que la salida del compilador sea un archivo *.module.json independiente para cada archivo de origen. Si proporciona un único argumento de nombre de archivo, puede que dos instancias del compilador intenten abrir el archivo de salida simultáneamente y provoquen un error. El uso de /MP con /sourceDependencies:directives- para enviar la salida a stdout podría provocar resultados intercalados.

Cuando se produce un error del compilador no grave, la información de dependencia se sigue escribiendo en el archivo de salida.

Todas las rutas de acceso de archivo se muestran como rutas de acceso absolutas en la salida.

Este modificador se puede usar con /translateInclude.

Ejemplos

Dado el código de ejemplo siguiente:

//main.cpp:
#include <vector>

import m;
import std.core;

import <utility>;

import "t.h";

int main() {}

La siguiente línea de comandos:

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

Genera un archivo JSON output.json similar al siguiente:

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

A fin de no extendernos demasiado, en el ejemplo anterior se usa ... para abreviar las rutas de acceso notificadas. El informe contiene las rutas de acceso absolutas. Las rutas de acceso notificadas dependen de dónde encuentra el compilador las dependencias. Si los resultados son inesperados, quizás le interese comprobar la configuración de la ruta de acceso de inclusión del proyecto.

ProvidedModule enumera los nombres del módulo exportado o la partición del módulo.

No se muestra ningún archivo .ifc en la salida porque no se ha compilado. A diferencia de /sourceDependencies, el compilador no genera una salida compilada cuando se especifica /sourceDependencies:directives, por lo que no se generan módulos compilados ni unidades de encabezado.

Para establecer esta opción del compilador en Visual Studio

Normalmente, no debe establecer esta opción en el entorno de desarrollo de Visual Studio. La establece el sistema de compilación.

Consulte también

/translateInclude
Referencia C++ header-units.json
Opciones del compilador de MSVC
Sintaxis de línea de comandos del compilador de MSVC
/scanDependencies (Enumerar dependencias de módulo en formato estándar)
/sourceDependencies (Enumerar todas las dependencias de nivel de origen).