交叉编译的 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++: Edit Configurations (UI)

Command Palette

IntelliSense 配置示例

以下示例展示了如何为以 Linux Arm 为目标的 Linux x64 主机配置 C/C++ 扩展。它配置了以下 IntelliSense 设置:

  • 编译器路径 (Compiler path):扩展会查询此位置的编译器,以获取系统库和编译器定义。
  • IntelliSense 模式 (IntelliSense mode):模拟目标架构和编译器,以便扩展能够提供正确的 IntelliSense,并反映 pointersize_tlong 等数据类型的正确大小。

通常情况下,设置编译器路径IntelliSense 模式足以让扩展模拟项目的目标架构。如果扩展能够根据查询编译器路径返回的定义正确选择模式,则可能不需要设置IntelliSense 模式

编译器路径

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

例如

Compiler path setting

IntelliSense 模式

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

例如

IntelliSense mode setting

包含路径 (Include path)

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

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

Include path setting

根据上述设置,您的 c_cpp_configurations.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
}

后续步骤

© . This site is unofficial and not affiliated with Microsoft.