參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

交叉編譯的 IntelliSense

本文介紹如何配置 C/C++ 擴充套件,以便在 Visual Studio Code 中為與開發主機不同的體系結構進行編譯時,能夠提供正確的 IntelliSense(例如程式碼自動完成)。例如,當您的主機是 x64 但您正在為 Arm 編譯時。

C/C++ 擴充套件不是一個編譯器——它提供豐富的語言功能,例如語法高亮和 IntelliSense。為了讓擴充套件提供正確的 IntelliSense 建議並反映正確的資料型別大小,您需要配置 C++ 擴充套件以模擬目標體系結構。

這些配置設定儲存在您專案的 c_cpp_properties.json 檔案中。若要編輯此檔案,請在 VS Code 中,從命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))選擇 C/C++: 編輯配置(UI)

Command Palette

IntelliSense 配置示例

下面展示了為一臺目標為 Linux Arm 的 Linux x64 主機配置 C/C++ 擴充套件的過程。它配置了以下 IntelliSense 設定:

  • 編譯器路徑:擴充套件會查詢此位置的編譯器,以獲取系統庫和編譯器定義。
  • IntelliSense 模式:模擬目標體系結構和編譯器,以便擴充套件可以提供正確的 IntelliSense 並反映正確的資料型別大小,例如 pointersize_tlong 等。

至少,設定編譯器路徑IntelliSense 模式可以為擴充套件提供足夠的資訊來模擬您專案的目標體系結構,不過如果擴充套件能夠根據查詢編譯器路徑返回的定義正確選擇 IntelliSense 模式,則可能不需要設定它。

編譯器路徑

設定為您用於構建專案的編譯器的完整路徑。

例如

Compiler path setting

IntelliSense 模式

設定為您正在使用的編譯器的特定於體系結構的變體。

例如

IntelliSense mode setting

包含路徑

僅當您的程式包含不在工作區或標準庫路徑中的標頭檔案時,才需要修改包含路徑

C/C++ 擴充套件透過查詢編譯器路徑指定的編譯器來填充包含路徑。如果擴充套件找不到目標系統庫的路徑,您可以手動輸入包含路徑。

Include path setting

根據上述設定,您的 c_cpp_configuration.json 檔案將類似於以下內容。您可以透過從命令面板中選擇 C/C++: 編輯配置(JSON) 來開啟它。

{
  "configurations": [
    {
      "name": "myConfigurationName",
      "includePath": ["${workspaceFolder}/**"],
      "defines": [],
      "compilerPath": "/usr/bin/arm-none-eabi-g++",
      "cStandard": "c11",
      "cppStandard": "c++14",
      "IntelliSenseMode": "gcc-arm"
    }
  ],
  "version": 4
}

後續步驟