交叉編譯的 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))

IntelliSense 設定範例
以下示範如何針對目標為 Linux Arm 的 Linux x64 主機設定 C/C++ 擴充功能。它會設定下列 IntelliSense 設定:
- 編譯器路徑:擴充功能會在此位置查詢您的編譯器,以擷取系統程式庫與編譯器定義。
- IntelliSense 模式:模擬目標架構與編譯器,讓擴充功能能夠提供正確的 IntelliSense,並反映諸如
pointer、size_t、long等資料類型的正確大小。
至少設定編譯器路徑和IntelliSense 模式就能提供足夠的資訊,讓擴充功能模擬您專案的目標架構;不過,如果擴充功能能夠根據查詢編譯器路徑所傳回的定義來正確選擇時,可能就不需要設定IntelliSense 模式。
編譯器路徑
設定為您用來建置專案之編譯器的完整路徑。
例如

IntelliSense 模式
設定為您正在使用的編譯器之特定架構變體。
例如

包含路徑
只有當您的程式包含不在您的工作區中,或不在標準程式庫路徑中的標頭檔時,您才需要修改包含路徑。
C/C++ 擴充功能會透過查詢由編譯器路徑所指定的編譯器來填入包含路徑。如果擴充功能找不到目標系統程式庫的路徑,您可以手動輸入包含路徑。

根據上述設定,您的 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
}
後續步驟
- 如需有關 IntelliSense 設定的詳細資訊,請參閱 自訂預設設定。
- 如果您在設定時遇到問題,請在 GitHub discussions 發起討論;如果您發現需要修復的問題,請在 GitHub issues 回報問題。
- 查閱 C++ 擴充功能總覽。