用于交叉编译的 IntelliSense

本文介绍如何配置 C/C++ 扩展,以便在针对与开发主机不同的体系结构进行编译时在 Visual Studio Code 中提供正确的 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 并反映数据类型的正确大小,例如pointersize_tlong等。

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

编译路径

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

例如:

编译路径设置

智能感知模式

设置为您正在使用的编译器的特定于体系结构的变体。

例如:

IntelliSense 模式设置

包含路径

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

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

包括路径设置

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

下一步