针对交叉编译的 IntelliSense
本文介绍如何在 Visual Studio Code 中配置 C/C++ 扩展,以便在为与开发主机环境不同的架构进行编译时(例如,主机是 x64 但您为 Arm 编译),提供适当的 IntelliSense(例如代码补全)。
C/C++ 扩展不是编译器——它提供丰富的语言功能,如语法高亮和 IntelliSense。为了使扩展能够提供正确的 IntelliSense 建议并反映正确的数据类型大小,您需要配置 C++ 扩展以模拟目标架构。
这些配置设置存储在项目的 c_cpp_properties.json 文件中。要在 VS Code 中编辑此文件,请从命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中选择 **C/C++: Edit Configurations (UI)**。

示例 IntelliSense 配置
以下显示了针对以 Linux Arm 为目标的 Linux x64 主机环境配置 C/C++ 扩展的过程。它配置了以下 IntelliSense 设置:
- 编译器路径 (Compiler path):扩展会查询此位置的编译器,以检索系统库和编译器定义。
- IntelliSense 模式 (IntelliSense mode):模拟目标架构和编译器,以便扩展能够提供正确的 IntelliSense 并反映正确的数据类型大小,例如
pointer、size_t、long等。
至少,设置 编译器路径 和 IntelliSense 模式 提供了足够的信息供扩展模拟项目的目标架构,尽管如果扩展能够根据查询 编译器路径 返回的定义正确选择 IntelliSense 模式,则可能不需要设置 IntelliSense 模式。
编译器路径
设置为您用于构建项目的编译器的完整路径。
例如

IntelliSense 模式
设置为您正在使用的编译器的特定于架构的变体。
例如

包含路径 (Include path)
只有当您的程序包含不在您的工作区中或不在标准库路径中的头文件时,才需要修改 包含路径。
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 讨论区 开启一个讨论,或者如果您发现需要修复的问题,请在 GitHub 问题区 提交一个 Issue。
- 查看 C++ 扩展概述。