CppProperties.json referência

Projetos de pasta aberta que não usam o CMake podem armazenar definições de configuração de projeto para IntelliSense em um CppProperties.json arquivo. (Os projetos CMake usam um CMakeSettings.json arquivo.) Uma configuração consiste em pares nome/valor e define caminhos #include, opções de compilador e outros parâmetros. Para obter mais informações sobre como adicionar configurações em um projeto de Pasta Aberta, consulte projetos de Pasta Aberta para C++. As seções a seguir resumem as várias configurações. Para obter uma descrição completa do esquema, navegue até CppProperties_schema.json, cujo caminho completo é fornecido na parte superior do editor de código quando CppProperties.json está aberto.

Propriedades de configuração

Uma configuração pode ter uma das seguintes propriedades:

Nome Descrição
inheritEnvironments Especifica quais ambientes se aplicam a essa configuração.
name O nome de configuração que será exibido na lista suspensa de configuração do C++
includePath Uma lista separada por vírgulas de pastas que devem ser especificadas no caminho de inclusão (mapeia para para a /I maioria dos compiladores)
defines A lista de macros que devem ser definidas (mapeia para para a /D maioria dos compiladores)
compilerSwitches Uma ou mais opções adicionais que podem influenciar o comportamento do IntelliSense
forcedInclude Cabeçalho a ser incluído automaticamente em cada unidade de compilação (mapas para MSVC ou -include para /FI clang)
undefines A lista de macros a serem indefinidas (mapeia para /U MSVC)
intelliSenseMode O mecanismo IntelliSense a ser usado. É possível especificar uma das variantes específicas de arquitetura predefinidas para MSVC, gcc ou Clang.
environments Conjuntos de variáveis definidos pelo usuário que se comportam como variáveis de ambiente em um prompt de comando e são acessados com a ${env.VARIABLE} macro.

Valores intelliSenseMode

O editor de código mostra as opções disponíveis quando você começa a digitar:

Screenshot of the IntelliSense pop-up in the editor.

Esta lista mostra os valores suportados:

  • 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

Observação: os valores msvc-x86 e msvc-x64 são compatíveis apenas por motivos de herança. Em vez disso, use as variantes windows-msvc-*.

Ambientes predefinidos

O Microsoft Visual Studio fornece os seguintes ambientes predefinidos para o Microsoft C++ que são mapeados para o Prompt de Comando do Desenvolvedor correspondente. Ao herdar um desses ambientes, você pode fazer referência a qualquer uma das variáveis de ambiente usando a propriedade env global com esta sintaxe de macro: ${env.VARIABLE}.

Nome da variável Descrição
vsdev O ambiente padrão do Visual Studio
msvc_x86 Compilar para x86 usando ferramentas x86
msvc_x64 Compilar para AMD64 usando ferramentas de 64 bits
msvc_arm Compilar para ARM usando ferramentas x86
msvc_arm64 Compilar para ARM64 usando ferramentas x86
msvc_x86_x64 Compilar para AMD64 usando ferramentas x86
msvc_arm_x64 Compilar para ARM usando ferramentas de 64 bits
msvc_arm64_x64 Compilar para ARM64 usando ferramentas de 64 bits

Quando a carga de trabalho do Linux é instalada, os seguintes ambientes ficam disponíveis para o direcionamento remoto do Linux e do WSL:

Nome da variável Descrição
linux_x86 Direcionar ao Linux x86 remotamente
linux_x64 Direcionar ao Linux x64 remotamente
linux_arm Direcionar ao ARM Linux remotamente

Ambientes definidos pelo usuário

Opcionalmente, você pode usar a environments propriedade para definir conjuntos de variáveis globalmente CppProperties.json ou por configuração. Essas variáveis se comportam como variáveis de ambiente no contexto de um projeto Open Folder. Você pode acessá-los com a ${env.VARIABLE} sintaxe de tasks.vs.json e launch.vs.json depois que eles são definidos aqui. No entanto, eles não são necessariamente definidos como variáveis de ambiente reais em qualquer prompt de comando que o Visual Studio usa internamente.

Visual Studio 2019 versão 16.4 e posterior: as variáveis específicas de configuração definidas em CppProperties.json são automaticamente captadas por destinos e tarefas de depuração sem a necessidade de definir inheritEnvironments. Os destinos de depuração são iniciados automaticamente com o ambiente especificado no CppProperties.json.

Microsoft Visual Studio 2019 versão 16.3 e anterior: ao consumir um ambiente, será necessário especificá-lo na propriedade inheritsEnvironments mesmo que o ambiente seja definido como parte da mesma configuração; a propriedade environment especifica o nome do ambiente. O exemplo a seguir mostra uma configuração de amostra para habilitar o IntelliSense para GCC em uma instalação do MSYS2. Observe como a configuração define e herda o ambiente mingw_64 e como a propriedade includePath pode acessar a variável 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"
        }
      ]
    }
  ]

Quando você define uma propriedade dentro de uma "environments" configuração, ela substitui quaisquer variáveis globais que tenham os mesmos nomes.

Macros internas

Você tem acesso às seguintes macros internas dentro de CppProperties.json:

Macro Descrição
${workspaceRoot} O caminho completo para a pasta de workspace
${projectRoot} O caminho completo para a pasta onde CppProperties.json é colocado
${env.vsInstallDir} O caminho completo para a pasta na qual a instância em execução do Microsoft Visual Studio está instalada

Exemplo

Se o projeto tiver uma pasta include e também incluir *windows.h* e outros cabeçalhos comuns do SDK do Windows, convém atualizar o CppProperties.json arquivo de configuração com as seguintes inclusões:

{
  "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"
      ]
    }
  ]
}

Observação

%WindowsSdkDir% e %VCToolsInstallDir% não são definidas como variáveis de ambiente global. Certifique-se de iniciar devenv.exe a partir de um prompt de comando do desenvolvedor que define essas variáveis. (Digite "desenvolvedor" no Menu Iniciar do Windows para localizar um atalho do Prompt de Comando do Desenvolvedor.)

Solucionar problemas de erros do IntelliSense

Se você não estiver vendo o IntelliSense esperado, poderá solucionar problemas acessando Ferramentas>Opções>Editor>de texto C/C++>Advanced e definindo Habilitar log como .true Para começar, tente definir Nível de registros em log como 5 e Filtros de registros em log como 8.

Screenshot of the Diagnostic logging settings in the Options dialog.

A saída é direcionada para a Janela de Saída e fica visível quando você escolhe Mostrar Saída de: Log do Microsoft Visual C++. A saída contém, entre outras coisas, a lista de caminhos de inclusão reais que o IntelliSense está tentando usar. Se os caminhos não corresponderem aos do , tente fechar a pasta e excluir a subpasta que contém dados .vs de navegação armazenados em CppProperties.jsoncache.

Para solucionar erros do IntelliSense causados por caminhos de inclusão ausentes, abra a guia Lista de Erros e filtre sua saída para "Somente IntelliSense" e o código de erro E1696 "não é possível abrir o arquivo de código-fonte ...".