🚀 在 VS Code 中免費取得

跨平台編譯的 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
}

後續步驟