Partilhar via


CppProperties.json referência

Os projetos de Pasta Aberta que não usam o CMake podem armazenar as definições de configuração do projeto para o IntelliSense em um CppProperties.json arquivo. (Os projetos do CMake usam um CMakeSettings.json arquivo.) Uma configuração consiste em pares de nome/valor e define caminhos #include, opções do 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 /I a maioria dos compiladores)
defines A lista de macros que devem ser definidas (mapeia 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 (mapeia para /FI para MSVC ou -include para 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:

Captura de tela do pop-up do IntelliSense no 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 se referir 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 de Pasta Aberta. 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 da configuração definidas em CppProperties.json são selecionadas automaticamente 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 "environments" propriedade dentro de uma configuração, ela substitui todas as variáveis globais que têm 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 de inclusão e também incluir *windows.h* e outros cabeçalhos comuns do SDK do Windows, talvez você queira atualizar seu 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 definidos como variáveis de ambiente global. Certifique-se de iniciar devenv.exe a partir de um Prompt de Comando do Desenvolvedor que defina essas variáveis. (Digite "desenvolvedor" no menu Iniciar do Windows para encontrar 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 para .true Para começar, tente definir Nível de registros em log como 5 e Filtros de registros em log como 8.

Captura de tela das configurações de log de diagnóstico na caixa de diálogo Opções.

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 os .vs dados 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 ...".