CppProperties.json riferimento

I progetti Apri cartella che non usano CMake possono archiviare le impostazioni di configurazione del progetto per IntelliSense in un CppProperties.json file. I progetti CMake usano un CMakeSettings.json file. Una configurazione è costituita da coppie nome/valore e definisce #include percorsi, opzioni del compilatore e altri parametri. Per altre informazioni su come aggiungere configurazioni in un progetto Apri cartella, vedere Open Folder projects for C++. Le sezioni seguenti riepilogano le varie impostazioni. Per una descrizione completa dello schema, passare a CppProperties_schema.json, il cui percorso completo viene specificato nella parte superiore dell'editor di codice quando CppProperties.json è aperto.

Proprietà di configurazione

Una configurazione può avere una delle proprietà seguenti:

Nome Descrizione
inheritEnvironments Specifica gli ambienti applicabili a questa configurazione.
name Nome della configurazione che verrà visualizzato nell'elenco a discesa configurazione C++
includePath Elenco delimitato da virgole di cartelle che devono essere specificate nel percorso di inclusione (mappato alla /I maggior parte dei compilatori)
defines Elenco di macro che devono essere definite (mappate alla maggior /D parte dei compilatori)
compilerSwitches Una o più opzioni aggiuntive che possono influire sul comportamento di IntelliSense
forcedInclude Intestazione da includere automaticamente in ogni unità di compilazione (mappa a /FI per MSVC o -include per clang)
undefines Elenco di macro da non definire (mappato a /U per MSVC)
intelliSenseMode Il motore IntelliSense da usare. È possibile specificare una delle varianti predefinite specifiche dell'architettura per MSVC, gcc o Clang.
environments Set definiti dall'utente di variabili che si comportano come variabili di ambiente in un prompt dei comandi e sono accessibili con la ${env.VARIABLE} macro.

Valori intelliSenseMode

L'editor di codice mostra le opzioni disponibili quando si inizia a digitare:

Screenshot del popup IntelliSense nell'editor.

Questo elenco mostra i valori supportati:

  • 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: i valori msvc-x86 e msvc-x64 sono supportati solo per motivi legacy. Usare invece le windows-msvc-* varianti.

Ambienti predefiniti

Visual Studio fornisce gli ambienti predefiniti seguenti per Microsoft C++ che eseguono il mapping al prompt dei comandi per gli sviluppatori corrispondente. Quando si eredita uno di questi ambienti, è possibile fare riferimento a una delle variabili di ambiente usando la proprietà env globale con questa sintassi di macro: ${env.VARIABLE}.

Nome variabile Descrizione
vsdev Ambiente Visual Studio predefinito
msvc_x86 Compilazione per x86 usando strumenti x86
msvc_x64 Compilazione per AMD64 usando strumenti a 64 bit
msvc_arm Compilazione per ARM usando strumenti x86
msvc_arm64 Compilazione per ARM64 usando strumenti x86
msvc_x86_x64 Compilazione per AMD64 usando strumenti x86
msvc_arm_x64 Compilazione per ARM usando strumenti a 64 bit
msvc_arm64_x64 Compilazione per ARM64 usando strumenti a 64 bit

Quando viene installato il carico di lavoro di Linux sono disponibili gli ambienti seguenti per la definizione di Linux e WSL come destinazione remota:

Nome variabile Descrizione
linux_x86 Imposta come destinazione x86 Linux in modalità remota
linux_x64 Imposta come destinazione x64 Linux in modalità remota
linux_arm Imposta come destinazione ARM Linux in modalità remota

Ambienti definiti dall'utente

Facoltativamente, è possibile usare la environments proprietà per definire set di variabili in tutto il mondo o per CppProperties.json ogni configurazione. Queste variabili si comportano come variabili di ambiente nel contesto di un progetto Apri cartella. È possibile accedervi con la ${env.VARIABLE} sintassi da tasks.vs.json e launch.vs.json dopo che sono stati definiti qui. Tuttavia, non sono necessariamente impostati come variabili di ambiente effettive in qualsiasi prompt dei comandi usato internamente da Visual Studio.

Visual Studio 2019 versione 16.4 e successive: le variabili specifiche della configurazione definite in CppProperties.json vengono prelevate automaticamente dalle destinazioni di debug e dalle attività senza la necessità di impostare inheritEnvironments. Le destinazioni di debug vengono avviate automaticamente con l'ambiente specificato in CppProperties.json.

Visual Studio 2019 versione 16.3 e precedenti: quando si utilizza un ambiente, è necessario specificarlo nella inheritsEnvironments proprietà anche se l'ambiente è definito come parte della stessa configurazione. La environment proprietà specifica il nome dell'ambiente. L'esempio seguente illustra una configurazione di esempio per l'abilitazione di IntelliSense per GCC in un'installazione di MSYS2. Si noti che la configurazione definisce ed eredita l'ambiente mingw_64 e come la includePath proprietà può accedere alla INCLUDE variabile.

"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 si definisce una "environments" proprietà all'interno di una configurazione, viene eseguito l'override di tutte le variabili globali con gli stessi nomi.

Macro predefinite

In CppProperties.json è possibile accedere alle macro predefinite seguenti:

Macro Descrizione
${workspaceRoot} Percorso completo della cartella dell'area di lavoro
${projectRoot} Percorso completo della cartella in cui CppProperties.json si trova
${env.vsInstallDir} Percorso completo della cartella in cui è installata l'istanza in esecuzione di Visual Studio

Esempio

Se il progetto include una cartella di inclusione e include *windows.hanche * e altre intestazioni comuni di Windows SDK, è possibile aggiornare il CppProperties.json file di configurazione con quanto segue:

{
  "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% e %VCToolsInstallDir% non sono impostati come variabili di ambiente globali. Assicurarsi di iniziare devenv.exe da un prompt dei comandi per gli sviluppatori che definisce queste variabili. Digitare "developer" nel menu Start di Windows per trovare un collegamento al prompt dei comandi per gli sviluppatori.

Risolvere gli errori di IntelliSense

Se non viene visualizzato IntelliSense previsto, è possibile risolvere i problemi passando a Strumenti>Opzioni>Editor>di testo C/C++>Avanzate e impostando Abilita registrazione su .true Per iniziare, provare a impostare Livello di registrazione su 5 e Filtri di registrazione su 8.

Screenshot delle impostazioni di registrazione diagnostica nella finestra di dialogo Opzioni.

L'output viene inviato tramite pipe alla finestra di output ed è visibile quando si sceglie Mostra output da: Log di Visual C++. L'output contiene, tra le altre cose, l'elenco dei percorsi di inclusione effettivi che IntelliSense sta tentando di usare. Se i percorsi non corrispondono a quelli in CppProperties.json, provare a chiudere la cartella ed eliminare la .vs sottocartella contenente i dati di esplorazione memorizzati nella cache.

Per risolvere gli errori di IntelliSense causati da percorsi di inclusione mancanti, aprire la scheda Elenco errori e quindi filtrare l'output in "Solo IntelliSense" e il codice di errore E1696 "cannot open source file ...".