跨平台編譯的 IntelliSense
本文旨在說明如何設定 C/C++ 擴充功能,以便在您針對與開發主機不同的架構進行編譯時,於 Visual Studio Code 中提供正確的 IntelliSense(例如程式碼自動完成)。例如,當您的主機是 x64 但您要針對 Arm 進行編譯時。
C/C++ 擴充功能並非編譯器,它提供諸如語法突顯與 IntelliSense 等豐富的語言功能。為了讓擴充功能提供正確的 IntelliSense 建議並反映資料型別的正確大小,您需要將 C++ 擴充功能設定為模擬目標架構。
這些設定會儲存在您專案的 c_cpp_properties.json 檔案中。若要編輯此檔案,請在 VS Code 的命令選擇區(Command Palette)中選擇 C/C++: Edit Configurations (UI)(⇧⌘P (Windows, Linux Ctrl+Shift+P))。

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

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

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

根據上述設定,您的 c_cpp_properties.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 設定的更多資訊,請參閱自訂預設設定 (Customizing default settings)。
- 如果您在設定上遇到困難,請在 GitHub discussions 發起討論;如果您發現需要修復的問題,請在 GitHub issues 提出。
- 查閱 C++ 擴充功能總覽。