Share via


CppProperties.json 參考

開啟不使用 CMake 的資料夾專案可以在檔案中 CppProperties.json 儲存 IntelliSense 的專案組態設定。 (CMake 專案使用 檔案 CMakeSettings.json 。)組態包含名稱/值組,並定義 #include 路徑、編譯器參數和其他參數。 如需如何在 Open Folder 專案中新增組態的詳細資訊,請參閱 針對 C++ 開啟資料夾專案。 下列各節摘要說明各種設定。 如需架構的完整描述,請流覽至 CppProperties_schema.json ,其完整路徑會在開啟時 CppProperties.json ,于程式碼編輯器頂端提供。

設定屬性

組態可以有下列任何屬性:

名稱 描述
inheritEnvironments 指定套用至此設定的環境。
name 將在 C++ 組態下拉式清單中顯示的組態名稱
includePath 應該在包含路徑中指定之資料夾的逗號分隔清單(對應至 /I 大多數編譯器)
defines 應該定義的宏清單(對應至 /D 大部分編譯器)
compilerSwitches 可能會影響 IntelliSense 行為的一或多個其他參數
forcedInclude 要自動包含在每個編譯單位中的標頭(對應至 /FI MSVC 或 -include clang)
undefines 要未定義的宏清單(對應至 /U MSVC)
intelliSenseMode 要使用的 IntelliSense 引擎。 您可以為 MSVC、gcc 或 Clang 指定其中一個預先定義的架構特定變體。
environments 使用者定義變數集,其行為就像命令提示字元中的環境變數,並使用宏存取 ${env.VARIABLE}

intelliSenseMode 值

當您開始輸入時,程式碼編輯器會顯示可用的選項:

Screenshot of the IntelliSense pop-up in the editor.

此清單顯示支援的值:

  • 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

注意:只有舊版原因才支援 和 msvc-x64msvc-x86 。 請改用 windows-msvc-* 變體。

預先定義的環境

Visual Studio 為 Microsoft C++ 提供下列預先定義的環境,其對應至對應的開發人員命令提示字元。 當您繼承其中一個環境時,可以使用全域屬性 env 搭配這個宏語法來參考任何環境變數: ${env.VARIABLE}

變數名稱 描述
vsdev 預設 Visual Studio 環境
msvc_x86 使用 x86 工具對 x86 進行編譯
msvc_x64 使用 64 位元工具對 AMD64 進行編譯
msvc_arm 使用 x86 工具對 ARM 進行編譯
msvc_arm64 使用 x86 工具對 ARM64 進行編譯
msvc_x86_x64 使用 x86 工具對 AMD64 進行編譯
msvc_arm_x64 使用 64 位元工具對 ARM 進行編譯
msvc_arm64_x64 使用 64 位元工具對 ARM64 進行編譯

安裝 Linux 工作負載之後,即可使用下列環境從遠端鎖定 Linux 和 WSL:

變數名稱 描述
linux_x86 從遠端鎖定 x86 Linux
linux_x64 從遠端鎖定 x64 Linux
linux_arm 從遠端鎖定 ARM Linux

使用者定義環境

您可以選擇性地使用 environments 屬性,在全域或個別組態中 CppProperties.json 定義變數集。 這些變數的行為就像 Open Folder 專案內容中的環境變數一樣。 您可以使用此處定義語法 tasks.vs.json 的 和 launch.vs.json 之後存取它們 ${env.VARIABLE} 。 不過,在 Visual Studio 內部使用的任何命令提示字元中,它們不一定設定為實際的環境變數。

Visual Studio 2019 16.4 版和更新版本: CppProperties.json 定義的組態特定變數會自動由偵錯目標和工作挑選,而不需要設定 inheritEnvironments 。 偵錯目標會隨著您在 中指定的 CppProperties.json 環境自動啟動。

Visual Studio 2019 16.3 版和更早版本: 當您取用環境時,即使環境定義為相同組態的一部分,您仍必須將其指定在 屬性中 inheritsEnvironments ; environment 屬性會指定環境的名稱。 下列範例示範在 MSYS2 安裝中啟用 GCC IntelliSense 的範例組態。 請注意組態如何定義及繼承 mingw_64 環境,以及屬性如何 includePath 存取 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"
        }
      ]
    }
  ]

當您在組態內定義 "environments" 屬性時,它會覆寫任何具有相同名稱的全域變數。

內建宏

您可以存取下列位於 CppProperties.json 內部的內建巨集:

Macro 描述
${workspaceRoot} 工作區資料夾的完整路徑
${projectRoot} 放置所在 CppProperties.json 資料夾的完整路徑
${env.vsInstallDir} 安裝 Visual Studio 執行中實例的資料夾完整路徑

範例

如果您的專案有 include 資料夾,而且也包含 *windows.h * 和其他來自 Windows SDK 的常見標頭,您可能會想要使用下列包含來更新組 CppProperties.json 態檔:

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

注意

%WindowsSdkDir%%VCToolsInstallDir% 未設定為全域環境變數。 請確定您從定義這些變數的開發人員命令提示字元開始 devenv.exe 。 (在 Windows [開始] 功能表中輸入 「developer」,以尋找開發人員命令提示字元快捷方式。

針對 IntelliSense 錯誤進行疑難排解

如果您未看到預期的 IntelliSense,您可以移至 [工具 > 選項 > ] 文字編輯器 > C/C++ > [進階 ],並將 [啟用記錄 ] 設定 true 來進行疑難排解。 若要從 開始,請嘗試將 [記錄層級 ] 設定為 5,並將 [記錄篩選] 設定 為 8。

Screenshot of the Diagnostic logging settings in the Options dialog.

輸出會管線傳送至 [輸出] 視窗 ,當您選擇 [顯示輸出來源:Visual C++ 記錄 檔] 時會顯示。 輸出包含 IntelliSense 嘗試使用的實際 Include 路徑清單。 如果路徑不符合 中的 CppProperties.json 路徑,請嘗試關閉資料夾,並刪除 .vs 包含快取流覽資料的子資料夾。

若要針對遺漏 Include 路徑所造成的 IntelliSense 錯誤進行疑難排解,請開啟 [ 錯誤清單 ] 索引標籤,然後將其輸出篩選為 「僅限 IntelliSense」,錯誤碼 E1696 「無法開放原始碼檔案...」。