用于跨编译的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):

示例 IntelliSense 配置
以下内容展示了为一个目标为 Linux Arm 的 Linux x64 主机配置 C/C++ 扩展。它配置了以下 IntelliSense 设置:
- 编译路径:扩展在此位置查询您的编译器以检索系统库和编译器定义。
- IntelliSense 模式:模拟目标架构和编译器,以便扩展可以提供正确的 IntelliSense 并反映数据类型的正确大小,例如
指针,大小_t,长等等。
至少,设置编译器路径和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
}