跨编译的智能感知

本文介绍如何在Visual Studio Code中配置C/C++扩展,以便在为不同于开发主机机器的架构编译时提供正确的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模式

编译器路径

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

例如:

编译器路径设置

智能感知模式

设置为正在使用的编译器的架构特定变体。

例如:

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
}

下一步