Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta opción del compilador genera un archivo JSON que enumera las dependencias de módulo y unidad de encabezado según la propuesta P1689R5 Format for describing dependencies of source filesestándar de C++ .
Sintaxis
/scanDependencies-
/scanDependenciesfilename
/scanDependenciesdirectory
Argumentos
-
Si se proporciona el guión único, el compilador emite el JSON de dependencias de origen a stdouto a donde se redirige la salida del compilador.
filename
El compilador escribe la salida de 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 o el argumento se trata como .filename El nombre del archivo de salida se basa en el nombre completo del archivo de entrada, con una extensión anexada .module.json . Por ejemplo, si el archivo proporcionado al compilador es main.cpp, el nombre de archivo de salida generado es main.cpp.module.json.
Observaciones
La /scanDependencies opción del compilador identifica qué dependencias, módulos y unidades de encabezado se deben compilar para poder compilar el proyecto que los usa. Por ejemplo, muestra import <library>; o import "library"; como dependencia de unidad de encabezado y import name; como dependencia de módulo. La intención es proporcionar esta información en un formato común consumible mediante herramientas de compilación como CMake. Para notificar las dependencias de módulo y unidad de encabezado, también debe compilar mediante /std:c++20 o posterior.
Esta opción de línea de comandos es similar a /sourceDependencies:directives y /sourceDependencies, pero difiere de las maneras siguientes:
- La salida usa el
P1689R5esquema, en lugar del esquema específico de Microsoft generado por/sourceDependencies:directives. - A diferencia
/sourceDependenciesde , el compilador no genera la salida compilada. En su lugar, los archivos se examinan para las directivas de módulo. No se genera código compilado, módulos ni unidades de encabezado. - El archivo JSON de salida no enumera los módulos importados ni las unidades de encabezado importadas (
.ifcarchivos) porque esta opción solo examina los archivos del proyecto. No hay módulos ni unidades de encabezado compiladas para enumerar. - Solo se muestran los módulos o unidades de encabezado importados directamente. No enumera las dependencias de los módulos importados ni de las unidades de encabezado.
- Los archivos de encabezado incluidos textualmente, como
#include <file>o#include "file", no aparecen como dependencias, a menos que se traduzcan a una unidad de encabezado mediante la/translateIncludeopción . -
/scanDependenciesestá pensado para usarse antes de.ifcque se compilan los archivos.
/scanDependencies está disponible a partir de la versión 17.2 de Visual Studio 2022. que no está habilitado de manera predeterminada.
Al especificar la opción del compilador (Compilar con varios procesos), se recomienda usar con un argumento de directorio./MP/scanDependencies Si proporciona un único argumento de nombre de archivo, dos instancias del compilador pueden intentar abrir el archivo de salida simultáneamente y provocar un error. El uso de /MP con para /scanDependencies- enviar la salida a stdout podría provocar resultados intercalados.
Cuando se produce un error de compilador no irrecuperable, la información de dependencia todavía se escribe en el archivo de salida.
Todas las rutas de acceso de archivo aparecen como rutas de acceso absolutas en la salida.
Para más información sobre el formato y el esquema usados en el archivo JSON de salida, consulte P1689R5 la sección 6.
Ejemplos
Tenga en cuenta el código de ejemplo siguiente:
//app.cpp:
#include <vector>
import other.module;
import std;
import "t.h";
import <iostream>;
int main() {}
Puede usar esta línea de comandos para notificar dependencias en app.cpp:
cl /std:c++latest /scanDependencies output.json app.cpp
El compilador genera un archivo JSON, output.json, con contenido similar al siguiente:
{
"version": 1,
"revision": 0,
"rules": [
{
"primary-output": "app.obj",
"outputs": [
"output.json"
],
"requires": [
{
"logical-name": "other.module"
},
{
"logical-name": "std"
},
{
"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
}
]
}
]
}
Hemos usado ... 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, es posible que desee comprobar la configuración de la ruta de acceso de inclusión del proyecto.
No .ifc se muestran archivos en la salida porque no se compilaron. A diferencia /sourceDependenciesde , el compilador no genera resultados compilados cuando /scanDependencies se especifica, por lo que no se generan módulos compilados ni unidades de encabezado para importar.
Para establecer esta opción del compilador en Visual Studio
Normalmente no debe establecer la /scanDependencies opción en el entorno de desarrollo de Visual Studio. El compilador no genera archivos de objeto al establecer esta opción, lo que hace que se produzca un error en el paso de vínculo y se notifique un error.
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento de las propiedades del compilador y la compilación.
Seleccione la página de propiedades Propiedades de configuración>C/C++>Línea de comandos.
Modifique la propiedad Opciones adicionales para agregar
/scanDependencies-o/scanDependencies "pathname", donde"pathname"hace referencia a un directorio para la salida.Elija Aceptar para guardar los cambios.
Para notificar las dependencias de módulos y unidades de encabezado, también debe establecer la propiedad Propiedades> de configuraciónGeneral> deC++ Language Standard en ISO C++20 Standard o posterior.
Para establecer esta opción del compilador mediante programación
- Consulte AdditionalOptions.
Consulte también
Importación de la biblioteca estándar de C++ mediante módulos
Opciones del compilador de MSVC
Sintaxis de línea de comandos del compilador de MSVC
/sourceDependencies:directives
/sourceDependencies
/std (Especificar la versión estándar del lenguaje)
/translateInclude