交叉編譯的 IntelliSense

本文介紹如何在 Visual Studio Code 中設定 C/C++ 擴充功能,以便在您針對與開發主機不同的架構進行編譯時,提供適當的 IntelliSense(例如程式碼自動完成)。例如,當您的主機是 x64,但您正針對 Arm 進行編譯時。

C/C++ 擴充功能並非編譯器——它提供豐富的語言功能,例如語法突顯與 IntelliSense。為了讓擴充功能提供正確的 IntelliSense 建議並反映資料類型的正確大小,您需要設定 C++ 擴充功能以模擬目標架構。

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

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++: Edit Configurations (JSON) 來開啟它

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

後續步驟

English 한국어 中文(简体) 中文(繁體)
© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.