Dela via


CppProperties.json referens

Öppna mappprojekt som inte använder CMake kan lagra projektkonfigurationsinställningar för IntelliSense i en CppProperties.json fil. (CMake-projekt använder en CMakeSettings.json fil.) En konfiguration består av namn/värde-par och definierar #include sökvägar, kompilatorväxlar och andra parametrar. Mer information om hur du lägger till konfigurationer i ett projekt med öppen mapp finns i Öppna mappprojekt för C++. I följande avsnitt sammanfattas de olika inställningarna. Om du vill ha en fullständig beskrivning av schemat går du till CppProperties_schema.json, vars fullständiga sökväg anges överst i kodredigeraren när CppProperties.json den är öppen.

Konfigurationsegenskaper

En konfiguration kan ha någon av följande egenskaper:

Namn Beskrivning
inheritEnvironments Anger vilka miljöer som gäller för den här konfigurationen.
name Konfigurationsnamnet som visas i listrutan C++-konfiguration
includePath En kommaavgränsad lista över mappar som ska anges i inkluderingssökvägen (motsvarar /I för de flesta kompilatorer)
defines Listan över makron som ska definieras (mappar till /D för de flesta kompilatorer)
compilerSwitches En eller flera ytterligare växlar som kan påverka IntelliSense-beteendet
forcedInclude Rubrik som ska ingå automatiskt i varje kompileringsenhet (mappar till /FI för MSVC eller -include för clang)
undefines Listan över makron som ska avdefinieras och som mappar till /U för MSVC
intelliSenseMode IntelliSense-motorn som ska användas. Du kan ange en av de fördefinierade arkitekturspecifika varianterna för MSVC, gcc eller Clang.
environments Användardefinierade uppsättningar med variabler som fungerar som miljövariabler i en kommandotolk och som används med ${env.VARIABLE} makrot.

intelliSenseMode-värden

Kodredigeraren visar tillgängliga alternativ när du börjar skriva:

Skärmbild av popup-fönstret IntelliSense i redigeraren.

Den här listan visar de värden som stöds:

  • 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

Obs! Värdena msvc-x86 och msvc-x64 stöds endast av äldre skäl. Använd varianterna windows-msvc-* i stället.

Fördefinierade miljöer

Visual Studio tillhandahåller följande fördefinierade miljöer för Microsoft C++ som mappas till motsvarande kommandotolk för utvecklare. När du ärver en av dessa miljöer kan du referera till någon av miljövariablerna med hjälp av den globala egenskapen env med den här makrosyntaxen: ${env.VARIABLE}.

Variabelnamn Beskrivning
vsdev Visual Studio-standardmiljön
msvc_x86 Kompilera för x86 med x86-verktyg
msvc_x64 Kompilera för AMD64 med 64-bitarsverktyg
msvc_arm Kompilera för ARM med x86-verktyg
msvc_arm64 Kompilera för ARM64 med x86-verktyg
msvc_x86_x64 Kompilera för AMD64 med x86-verktyg
msvc_arm_x64 Kompilera för ARM med 64-bitarsverktyg
msvc_arm64_x64 Kompilera för ARM64 med 64-bitarsverktyg

När Linux-arbetsbelastningen har installerats är följande miljöer tillgängliga för fjärranslutning till Linux och WSL:

Variabelnamn Beskrivning
linux_x86 Mål x86 Linux på distans
linux_x64 Inrikta x64 Linux fjärranslutet
linux_arm Rikta in sig på ARM Linux-system på distans

Användardefinierade miljöer

Du kan också använda environments egenskapen för att definiera uppsättningar variabler i CppProperties.json antingen globalt eller per konfiguration. Dessa variabler fungerar som miljövariabler i kontexten för ett projekt med öppen mapp. Du kan komma åt dem med syntaxen ${env.VARIABLE} från tasks.vs.json och launch.vs.json efter att de har definierats här. De anges dock inte nödvändigtvis som faktiska miljövariabler i någon kommandotolk som Visual Studio använder internt.

Visual Studio 2019 version 16.4 och senare: Konfigurationsspecifika variabler som definieras i CppProperties.json hämtas automatiskt av felsökningsmål och uppgifter utan att du behöver ange inheritEnvironments. Felsökningsmål startas automatiskt med den miljö som du anger i CppProperties.json.

Visual Studio 2019 version 16.3 och tidigare: När du använder en miljö måste du ange den i inheritsEnvironments egenskapen även om miljön definieras som en del av samma konfiguration. environment Egenskapen anger namnet på miljön. I följande exempel visas en exempelkonfiguration för att aktivera IntelliSense för GCC i en MSYS2-installation. Observera hur konfigurationen både definierar och ärver mingw_64 miljön och hur includePath egenskapen kan komma åt variabeln 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"
        }
      ]
    }
  ]

När du definierar en "environments" egenskap i en konfiguration åsidosätter den alla globala variabler som har samma namn.

Inbyggda makron

Du har åtkomst till följande inbyggda makron i CppProperties.json:

Makro Beskrivning
${workspaceRoot} Den fullständiga sökvägen till arbetsytans mapp
${projectRoot} Den fullständiga sökvägen till mappen där CppProperties.json är placerad
${env.vsInstallDir} Den fullständiga sökvägen till mappen där den instans av Visual Studio som körs är installerad

Exempel

Om ditt projekt har en mapp för inkluderingar och även innehåller *windows.h* och andra vanliga huvuden från Windows SDK, kanske du vill uppdatera CppProperties.json konfigurationsfilen med följande inkluderingsdirektiv:

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

Anmärkning

%WindowsSdkDir% och %VCToolsInstallDir% anges inte som globala miljövariabler. Se till att du börjar devenv.exe från en kommandotolk för utvecklare som definierar dessa variabler. (Skriv "utvecklare" på Start-menyn i Windows för att hitta en genväg till kommandotolken för utvecklare.)

Felsöka IntelliSense-fel

Om du inte ser den IntelliSense som du förväntar dig kan du felsöka genom att gå till Verktyg>Alternativ>Textredigerare>C/C++>Avancerat och ange Aktivera loggning till true. Börja med att prova att ange loggningsnivå till 5 och loggningsfilter till 8.

Skärmbild av inställningarna för diagnostikloggning i dialogrutan Alternativ.

Utdata skickas till utdatafönstret och visas när du väljer Visa utdata från: Visuell C++-logg. Utdata innehåller bland annat listan över de faktiska inkluderingssökvägar som IntelliSense försöker använda. Om sökvägarna inte matchar dem i CppProperties.jsonkan du försöka stänga mappen och ta bort undermappen .vs som innehåller cachelagrade webbdata.

Om du vill felsöka IntelliSense-fel som orsakas av sökvägar som saknas öppnar du fliken Fellista och filtrerar sedan utdata till "Endast IntelliSense" och felkoden E1696 "kan inte öppna källfilen ...".