Referencia CppProperties.json
Abra proyectos de carpeta que no usen CMake puede almacenar las opciones de configuración del proyecto para IntelliSense en un CppProperties.json
archivo. (Los proyectos de CMake usan un CMakeSettings.json
archivo). Una configuración consta de pares nombre-valor y define #include rutas de acceso, modificadores del compilador y otros parámetros. Para más información sobre cómo agregar configuraciones en un proyecto de Open Folder, consulte Proyectos de Open Folder para C++. En las secciones siguientes se resumen las diversas opciones de configuración. Para obtener una descripción completa del esquema, vaya a CppProperties_schema.json, cuya ruta de acceso completa se da en la parte superior del editor de código cuando CppProperties.json
está abierta.
Propiedades de configuración
Una configuración puede tener cualquiera de las propiedades siguientes:
Nombre | Descripción |
---|---|
inheritEnvironments |
Especifica qué entornos se aplican a esta configuración. |
name |
Nombre de configuración que aparecerá en la lista desplegable de configuración de C++. |
includePath |
Lista separada por comas de carpetas que se deben especificar en la ruta de acceso de inclusión (se asigna a /I para la mayoría de los compiladores) |
defines |
Lista de macros que se deben definir (se asigna a /D para la mayoría de los compiladores) |
compilerSwitches |
Uno o varios modificadores adicionales que pueden influir en el comportamiento de IntelliSense. |
forcedInclude |
Encabezado que se incluirá automáticamente en cada unidad de compilación (se asigna a /FI para MSVC o -include para clang). |
undefines |
Lista de macros que se van a definir (se asigna a /U para MSVC) |
intelliSenseMode |
Motor de IntelliSense que se va usar. Puede especificar una de las variantes predefinidas específicas de la arquitectura para MSVC, gcc o Clang. |
environments |
Conjuntos definidos por el usuario de variables que se comportan como variables de entorno en un símbolo del sistema y a los que se accede con la ${env.VARIABLE} macro. |
Valores de intelliSenseMode
El editor de código muestra las opciones disponibles cuando empieza a escribir:
En esta lista se muestran los valores admitidos:
windows-msvc-x86
windows-msvc-x64
windows-msvc-arm
windows-msvc-arm64
android-clang-x86
android-clang-x64
android-clang-arm
android-clang-arm64
ios-clang-x86
ios-clang-x64
ios-clang-arm
ios-clang-arm64
windows-clang-x86
windows-clang-x64
windows-clang-arm
windows-clang-arm64
linux-gcc-x86
linux-gcc-x64
linux-gcc-arm
Nota: Los valores msvc-x86
y msvc-x64
solo se admiten por motivos heredados. En su lugar, use las variantes windows-msvc-*
.
Entornos predefinidos
Visual Studio proporciona los siguientes entornos predefinidos para Microsoft C++ que se asignan al Símbolo del sistema para desarrolladores correspondiente. Al heredar uno de estos entornos, puede hacer referencia a cualquiera de las variables de entorno mediante la propiedad env
global con esta sintaxis de macro: ${env.VARIABLE}
.
Nombre de variable | Descripción |
---|---|
vsdev |
El entorno de Visual Studio predeterminado. |
msvc_x86 |
Compilar para x86 con herramientas de x86. |
msvc_x64 |
Compilar para AMD64 con herramientas de 64 bits. |
msvc_arm |
Compilar para ARM con herramientas de x86. |
msvc_arm64 |
Compilar para ARM64 con herramientas de x86. |
msvc_x86_x64 |
Compilar para AMD64 con herramientas de x86. |
msvc_arm_x64 |
Compilar para ARM con herramientas de 64 bits. |
msvc_arm64_x64 |
Compilar para ARM64 con herramientas de 64 bits. |
Cuando se instala la carga de trabajo de Linux, los entornos siguientes están disponibles para seleccionar como destino Linux y WSL de forma remota:
Nombre de variable | Descripción |
---|---|
linux_x86 |
Se destina a Linux x86 de forma remota. |
linux_x64 |
Se destina a Linux x64 de forma remota. |
linux_arm |
Se destina a Linux ARM de forma remota. |
Entornos definidos por el usuario
Opcionalmente, puede usar la environments
propiedad para definir conjuntos de variables en CppProperties.json
global o por configuración. Estas variables se comportan como variables de entorno en el contexto de un proyecto de Open Folder. Puede acceder a ellos con la ${env.VARIABLE}
sintaxis desde tasks.vs.json
y launch.vs.json
después de definirlos aquí. Sin embargo, no se establecen necesariamente como variables de entorno reales en ningún símbolo del sistema que Visual Studio use internamente.
Visual Studio 2019, versión 16.4 y posteriores: las variables específicas de configuración definidas en CppProperties.json
se seleccionan automáticamente mediante destinos y tareas de depuración sin necesidad de establecer inheritEnvironments
. Los destinos de depuración se inician automáticamente con el entorno especificado en CppProperties.json
.
Visual Studio 2019, versión 16.3 y anteriores: cuando se consume un entorno, debe especificarlo en la inheritsEnvironments
propiedad incluso si el entorno se define como parte de la misma configuración; la environment
propiedad especifica el nombre del entorno. En el ejemplo siguiente se muestra una configuración para habilitar IntelliSense para GCC en una instalación de MSYS2. Observe cómo la configuración define y hereda el entorno mingw_64
y cómo la propiedad includePath
puede acceder a la variable INCLUDE
.
"configurations": [
{
"inheritEnvironments": [
"mingw_64"
],
"name": "Mingw64",
"includePath ,": [
"${env.INCLUDE}",
"${workspaceRoot}\\**",
],
"intelliSenseMode": "linux-gcc-x64",
"environments": [
{
"MINGW64_ROOT": "C:\\msys64\\mingw64",
"BIN_ROOT": "${env.MINGW64_ROOT}\\bin",
"FLAVOR": "x86_64-w64-mingw32",
"TOOLSET_VERSION": "9.1.0",
"PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\local\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.MINGW64_ROOT}\\..\\bin;${env.PATH}",
"INCLUDE": "${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR};",
"environment": "mingw_64"
}
]
}
]
Al definir una "environments"
propiedad dentro de una configuración, invalida las variables globales que tengan los mismos nombres.
Macros integradas
Dentro de CppProperties.json
tiene acceso a las macros integradas siguientes:
Macro | Descripción |
---|---|
${workspaceRoot} |
La ruta de acceso completa a la carpeta del área de trabajo. |
${projectRoot} |
Ruta de acceso completa a la carpeta donde CppProperties.json se coloca |
${env.vsInstallDir} |
La ruta de acceso completa a la carpeta donde está instalada la instancia en ejecución de Visual Studio. |
Ejemplo
Si el proyecto tiene una carpeta include y también incluye *windows.h
* y otros encabezados comunes de Windows SDK, es posible que quiera actualizar CppProperties.json
el archivo de configuración con los siguientes elementos:
{
"configurations": [
{
"name": "Windows",
"includePath": [
// local include folder
"${workspaceRoot}\\include",
// Windows SDK and CRT headers
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\ucrt",
"${env.NETFXSDKDir}\\include\\um",
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\um",
"${env.WindowsSdkDir}\\include\\${env.WindowsSDKVersion}\\shared",
"${env.VCToolsInstallDir}\\include"
]
}
]
}
Nota:
%WindowsSdkDir%
y %VCToolsInstallDir%
no se establecen como variables de entorno globales. Asegúrese de empezar devenv.exe
desde un símbolo del sistema para desarrolladores que defina estas variables. (Escriba "desarrollador" en el menú Inicio de Windows para buscar un acceso directo del símbolo del sistema para desarrolladores).
Solución de errores de IntelliSense
Si no ve IntelliSense que espera, puede solucionar problemas; para ello, vaya a Opciones>de herramientas>Editor>de texto C/C++>Avanzado y establezca Habilitar registro en .true
Para empezar, pruebe a establecer Nivel de registro en 5 y Filtro de registro en 8.
La salida se canaliza a la ventana de salida y está visible al elegir Mostrar salida desde: Registro de Visual C++. La salida contiene, entre otras cosas, la lista de rutas de acceso de inclusión reales que IntelliSense está intentando usar. Si las rutas de acceso no coinciden con las de , intente cerrar la carpeta y eliminar la .vs
subcarpeta que contiene datos de exploración almacenados CppProperties.json
en caché.
Para solucionar los errores de IntelliSense causados por la falta de rutas de acceso de inclusión, abra la pestaña Lista de errores y, a continuación, filtre su salida a "Solo IntelliSense" y el código de error E1696 "no puede código abierto archivo ...".