现已发布!阅读 10 月份的新功能和修复。

交叉编译的 IntelliSense

本文介绍如何配置 C/C++ 扩展,以便在您为与开发主机不同的架构编译时(例如,当您的主机为 x64 但您要为 Arm 编译时),在 Visual Studio Code 中提供正确的 IntelliSense(例如,代码补全)。

C/C++ 扩展不是编译器——它提供了丰富的语言功能,例如语法高亮和 IntelliSense。为了使扩展能够提供正确的 IntelliSense 建议并反映数据类型的正确大小,您需要配置 C++ 扩展以模拟目标架构。

这些配置设置存储在项目的 c_cpp_properties.json 文件中。要编辑此文件,请在 VS Code 中,从命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 中选择 **C/C++: 编辑配置 (UI)**。

Command Palette

IntelliSense 配置示例

以下显示了为针对 Linux Arm 的 Linux x64 主机配置 C/C++ 扩展。它配置了以下 IntelliSense 设置

  • **编译器路径**:扩展会在该位置查询您的编译器以检索系统库和编译器定义。
  • **IntelliSense 模式**:模拟目标架构和编译器,以便扩展能够提供正确的 IntelliSense 并反映数据类型的正确大小,例如 pointersize_tlong 等。

至少,设置 **编译器路径** 和 **IntelliSense 模式** 为扩展提供了足够的信息来模拟项目的目标架构,尽管如果扩展能够根据从查询 **编译器路径** 返回的定义正确选择 **IntelliSense 模式**,则可能不需要设置 **IntelliSense 模式**。

编译器路径

设置为用于构建项目的编译器的完整路径。

例如

Compiler path setting

IntelliSense 模式

设置为所用编译器的特定于架构的变体。

例如

IntelliSense mode setting

包含路径

只有当程序包含不在工作区中或不在标准库路径中的头文件时,才需要修改 **包含路径**。

C/C++ 扩展会通过查询由 **编译器路径** 指定的编译器来填充包含路径。如果扩展无法找到目标系统库的路径,则可以手动输入包含路径

Include path setting

鉴于上述设置,您的 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
}

后续步骤