Share via


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 asigna 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:

Screenshot of the IntelliSense pop-up in the editor.

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.

Screenshot of the Diagnostic logging settings in the Options dialog.

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.jsonen 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 ...".