用于交叉编译的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 并反映正确的数据类型大小,例如指针,size_t,很长,依此类推。

至少,设置编译器路径IntelliSense 模式可以提供足够的信息,使扩展能够模拟你项目的目标架构,尽管如果扩展能够根据查询编译器路径返回的定义正确选择 IntelliSense 模式,可能不需要设置 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
}

下一步

  • 有关IntelliSense配置的更多信息,请参见“自定义默认设置”。
  • 如果你在设置设置上遇到困难,请在GitHub讨论区发起讨论;或者如果你发现需要修复的问题,请在GitHub issues提交问题。
  • 请查看C++扩展概述。