跨平臺編譯的 IntelliSense
本文介紹如何在 Visual Studio Code 中配置 C/C++ 擴充套件,以便在編譯到與開發主機不同的體系結構時提供正確的 IntelliSense(例如程式碼補全)。例如,當您的主機是 x64,但您正在編譯 Arm 版本時。
C/C++ 擴充套件本身不是編譯器,它提供豐富的語言功能,如語法高亮和 IntelliSense。為了使擴充套件提供正確的 IntelliSense 建議並反映正確的資料型別大小,您需要配置 C++ 擴充套件以模擬目標體系結構。
這些配置設定儲存在專案的 c_cpp_properties.json 檔案中。要編輯此檔案,請在 VS Code 中,從命令面板中選擇 C/C++: 編輯配置(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++: 編輯配置(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 上提交 issue。
- 檢視 C++ 擴充套件概述。