🚀 在 VS Code 中取得

c_cpp_properties.json 參考

本文說明 c_cpp_properties.json 設定檔的結構描述。

想要開始設定您的專案嗎?請參閱設定 Intellisense。如需變更這些設定的詳細資訊,請參閱自訂預設設定

變數範例

請注意,這是一個包含所有欄位的範例。您不需要在 c_cpp_properties.json 檔案中指定所有欄位。擴充功能會自動填入任何遺漏欄位的預設值。

{
  "env": {
    "myIncludePath": ["${workspaceFolder}/include", "${workspaceFolder}/src"],
    "myDefines": ["DEBUG", "MY_FEATURE=1"]
  },
  "configurations": [
    {
      "name": "Linux",
      "compilerPath": "/usr/bin/gcc",
      "compilerArgs": ["-m32"],
      "intelliSenseMode": "linux-gcc-x86",
      "includePath": ["${myIncludePath}", "/usr/include"],
      "defines": ["${myDefines}"],
      "cStandard": "gnu11",
      "cppStandard": "gnu++14",
      "configurationProvider": "ms-vscode.cmake-tools",
      "forcedInclude": ["${workspaceFolder}/common.h"],
      "compileCommands": "${workspaceFolder}/build/compile_commands.json",
      "dotConfig": "${workspaceFolder}/.config",
      "mergeConfigurations": true,
      "customConfigurationVariables": {
        "myVar": "myvalue"
      },
      "browse": {
        "path": ["${myIncludePath}", "/usr/include", "${workspaceFolder}"],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": "${workspaceFolder}/.vscode/browse.vc.db"
      }
    },
    {
      "name": "Mac",
      "compilerPath": "/usr/bin/clang",
      "intelliSenseMode": "macos-clang-x64",
      "includePath": ["${myIncludePath}"],
      "defines": ["${myDefines}"],
      "cStandard": "c11",
      "cppStandard": "c++17",
      "macFrameworkPath": ["/System/Library/Frameworks", "/Library/Frameworks"],
      "browse": {
        "path": ["${myIncludePath}", "${workspaceFolder}"]
      }
    },
    {
      "name": "Win32",
      "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe",
      "intelliSenseMode": "windows-msvc-x64",
      "includePath": ["${myIncludePath}"],
      "defines": ["${myDefines}", "_WINDOWS"],
      "cStandard": "c17",
      "cppStandard": "c++20",
      "windowsSdkVersion": "10.0.19041.0",
      "browse": {
        "path": ["${myIncludePath}", "${workspaceFolder}"]
      }
    }
  ],
  "version": 4,
  "enableConfigurationSquiggles": true
}

最上層屬性

  • env 使用者定義變數的陣列,這些變數可透過標準環境變數語法在組態中進行取代:${<var>}${env:<var>}。接受字串和字串陣列。

  • configurations 組態物件的陣列,為 IntelliSense 引擎提供有關您的專案和偏好設定的資訊。根據預設,擴充功能會根據您的作業系統為您建立組態。您也可以新增其他組態。

  • version 我們建議您不要編輯此欄位。它會追蹤 c_cpp_properties.json 檔案的目前版本,以便擴充功能知道應該存在哪些屬性和設定,以及如何將此檔案升級至最新版本。

  • enableConfigurationSquiggles 設定為 true 以向 C/C++ 擴充功能報告在 c_cpp_properties.json 檔案中偵測到的錯誤。

組態屬性

  • name 識別組態的易記名稱。LinuxMacWin32 是特殊識別碼,用於在這些平台上自動選取的組態。VS Code 中的狀態列會顯示哪個組態處於作用中狀態。您也可以選取狀態列中的標籤來變更作用中組態。

  • compilerPath (選用) 用於建置專案的編譯器的完整路徑,例如 /usr/bin/gcc,以啟用更精確的 IntelliSense。擴充功能會查詢編譯器,以判斷系統包含路徑和預設定義,以用於 IntelliSense。

    放入 "compilerPath": "" (空字串) 將會略過查詢編譯器。如果指定的編譯器不支援用於查詢的引數,這會很有用,因為擴充功能會預設回到它可以找到的任何編譯器 (例如 Visual C)。省略 compilerPath 屬性不會略過查詢。

  • compilerArgs (選用) 用於修改所使用包含或定義的編譯器引數,例如 -nostdinc++-m32 等。採用額外空格分隔引數的引數應以陣列中的個別引數輸入,例如,對於 --sysroot <arg>,請使用 \"--sysroot\", \"<arg>\"

  • intelliSenseMode 要使用的 IntelliSense 模式,其會對應至 MSVC、gcc 或 Clang 的架構特定變體。如果未設定或設定為 ${default},擴充功能將會選擇該平台的預設值。

    平台預設值

    • Windows:windows-msvc-x64
    • Linux:linux-gcc-x64
    • macOS:macos-clang-x64

    僅指定 <compiler>-<architecture> 變體 (例如 gcc-x64) 的 IntelliSense 模式是舊版模式,並且會根據主機平台自動轉換為 <platform>-<compiler>-<architecture> 變體。

  • includePath 包含路徑是一個資料夾,其中包含標頭檔 (例如 #include "myHeaderFile.h"),這些標頭檔包含在原始檔中。指定 IntelliSense 引擎在搜尋包含的標頭檔時要使用的路徑清單。在這些路徑上的搜尋不是遞迴的。指定 ** 以指示遞迴搜尋。例如,${workspaceFolder}/** 將會搜尋所有子目錄,而 ${workspaceFolder} 則不會。如果在安裝 Visual Studio 的 Windows 上,或是在 compilerPath 設定中指定編譯器,則不需要在此清單中列出系統包含路徑。

  • defines 預處理器定義的清單,供 IntelliSense 引擎在剖析檔案時使用。您可以選擇性地使用 = 來設定值,例如 VERSION=1

  • cStandard 用於 IntelliSense 的 C 語言標準版本。例如,c17gnu23${default}。請注意,GNU 標準僅用於查詢設定的編譯器以取得 GNU 定義,而 IntelliSense 將會模擬對等的 C 標準版本。

  • cppStandard 用於 IntelliSense 的 C++ 語言標準版本。例如,c++20gnu++23${default}。注意:GNU 標準僅用於查詢設定的編譯器以取得 GNU 定義,而 IntelliSense 將會模擬對等的 C++ 標準版本。

  • configurationProvider 可以為原始檔提供 IntelliSense 組態資訊的 VS Code 擴充功能的 ID。例如,使用 VS Code 擴充功能 ID ms-vscode.cmake-tools 從 CMake 工具擴充功能提供組態資訊。如果您已指定 configurationProvider,則提供的組態會優先於 c_cpp_properties.json 中的其他設定。

    configurationProvider 候選擴充功能必須實作 vscode-cpptools-api

  • windowsSdkVersion 要在 Windows 上使用的 Windows SDK 包含路徑版本,例如 10.0.17134.0

  • macFrameworkPath IntelliSense 引擎在搜尋來自 Mac Framework 的包含標頭時要使用的路徑清單。僅在 macOS 的組態上支援。

  • forcedInclude (選用) 應在處理原始檔中的任何其他字元之前包含的檔案清單。檔案會依列出的順序包含。

  • compileCommands (選用) 工作區的 compile_commands.json 檔案完整路徑。如果 compile_commands.json 中有與編輯器中開啟的檔案相符的項目,則該命令列將用於設定該檔案的 IntelliSense,而不是 c_cpp_properties.json 的其他欄位。如需檔案格式的詳細資訊,請參閱 Clang 文件。某些建置系統 (例如 CMake) 簡化了此檔案的產生

  • dotConfig Kconfig 系統所建立之 .config 檔案的路徑。Kconfig 系統會產生一個檔案,其中包含建置專案所需的所有定義。使用 Kconfig 系統的專案範例包括 Linux Kernel 和 NuttX RTOS。

  • mergeConfigurations 設定為 true 以將包含路徑、定義和強制包含與來自組態提供者的項目合併。

  • customConfigurationVariables 可透過命令 ${cpptools:activeConfigCustomVariable} 查詢的自訂變數,以用於 launch.jsontasks.json 中的輸入變數。

  • browse"C_Cpp.intelliSenseEngine" 設定為 "Tag Parser" (也稱為「模糊」IntelliSense 或「瀏覽」引擎) 時使用的一組屬性。這些屬性也由 [移至定義/宣告] 功能使用,或當「預設」IntelliSense 引擎無法解析原始檔中的 #includes 時使用。

瀏覽屬性

  • path Tag Parser 搜尋原始檔所包含標頭的路徑清單。如果省略,則 includePath 將會用作路徑。預設會在這些路徑上進行遞迴搜尋。指定 * 以指示非遞迴搜尋。例如:${workspaceFolder} 將會搜尋所有子目錄,而 ${workspaceFolder}/* 則不會。

  • limitSymbolsToIncludedHeaders 如果為 true,則 Tag Parser 將只剖析已由 ${workspaceFolder} 中原始檔直接或間接包含的程式碼檔案。如果為 false,則 Tag Parser 將剖析在 browse.path 清單中指定路徑中找到的所有程式碼檔案。

  • databaseFilename 產生符號資料庫的路徑。此屬性指示擴充功能將 Tag Parser 的符號資料庫儲存在工作區預設儲存位置以外的其他位置。如果指定相對路徑,則會使其相對於工作區的預設儲存位置,而不是工作區資料夾本身。${workspaceFolder} 變數可用於指定相對於工作區資料夾的路徑 (例如 ${workspaceFolder}/.vscode/browse.vc.db)

支援的變數

您可以允許 tasks.jsonlaunch.jsonc_cpp_properties.json 查詢目前的作用中組態。若要執行此動作,請使用變數 ${command:cpptools.activeConfigName} 作為 tasks.jsonlaunch.json 指令碼中的引數。