Partilhar via


CppProperties.json referência

Projetos de pasta aberta que não usam o CMake podem armazenar definições de configuração de projeto para o 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 é dado na parte superior do editor de código quando CppProperties.json está aberto.

Propriedades de configuração

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

Nome Descrição
inheritEnvironments Especifica quais ambientes se aplicam a essa configuração.
name O nome da configuração que aparecerá na lista suspensa de configuração do C++
includePath Uma lista separada por vírgulas de diretórios que devem ser especificados no path de inclusão (mapeia para /I na maioria dos compiladores)
defines A lista de macros que devem ser definidas (corresponde a /D na 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 (corresponde a /FI para MSVC, ou -include para clang)
undefines A lista de macros a serem indefinidas (corresponde a /U no MSVC)
intelliSenseMode O mecanismo IntelliSense que deve ser utilizado. Você pode especificar uma das variantes específicas da 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 do "intelliSenseMode"

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

Captura de ecrã 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

Nota: Os valores msvc-x86 e msvc-x64 são suportados apenas por motivos herdados. Em vez disso, use as variantes windows-msvc-*.

Ambientes pré-definidos

Visual Studio fornece os seguintes ambientes predefinidos para o Microsoft C++ que correspondem ao 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 estão disponíveis para acesso remoto ao Linux e WSL:

Nome da variável Descrição
linux_x86 Destinar sistemas Linux x86 remotamente
linux_x64 Target x64 Linux remotamente
linux_arm Controle remotamente o Linux ARM

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 lançados automaticamente com o ambiente que você especificar em CppProperties.json.

Visual Studio 2019 versão 16.3 e anterior: Quando você consome um ambiente, então você tem que especificá-lo na inheritsEnvironments propriedade, mesmo que o ambiente seja definido como parte da mesma configuração, a environment propriedade especifica o nome do ambiente. O exemplo a seguir mostra uma configuração de exemplo para habilitar o IntelliSense para GCC em uma instalação MSYS2. Observe como a configuração define e herda o mingw_64 ambiente e como a includePath propriedade pode acessar a INCLUDE variável.

"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 incorporadas

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

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

Exemplo

Se o seu projeto tiver uma pasta include e também incluir *windows.h* e outros cabeçalhos comuns do SDK do Windows, convém atualizar o seu arquivo de configuração CppProperties.json 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 encontrar um atalho do Prompt de Comando do Desenvolvedor.)

Solucionar problemas de erros do IntelliSense

Se não estiver a ver o IntelliSense esperado, pode resolver problemas acedendo a Tools>Options>Text Editor>C/C++>Advanced e definindo Enable Logging to true. Para começar, tente definir Nível de Log como 5 e Filtros de Log como 8.

Captura de ecrã das definições de registo de diagnóstico na caixa de diálogo Opções.

A saída é canalizada para a janela de saída e é visível quando você escolhe Mostrar saída de: Visual C++ Log. 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 de CppProperties.json, tenta fechar a pasta e eliminar a subpasta .vs que contém dados de navegação em cache.

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