跨平台编译的 IntelliSense
本文介绍了如何配置 C/C++ 扩展,以便在 Visual Studio Code 中进行跨平台编译时(例如,宿主机是 x64,但编译目标是 Arm)提供正确的 IntelliSense(例如,代码补全)。
C/C++ 扩展不是编译器,它提供丰富的语言特性,例如语法高亮和 IntelliSense。为了让该扩展提供正确的 IntelliSense 建议并反映正确的数据类型大小,你需要配置 C++ 扩展以模拟目标架构。
这些配置设置存储在你的项目文件 c_cpp_properties.json
中。要在 VS Code 中编辑此文件,请从命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 选择 C/C++: 编辑配置 (UI)。
IntelliSense 配置示例
以下展示了为 Linux x64 宿主机配置 C/C++ 扩展以面向 Linux Arm 的示例。它配置了以下 IntelliSense 设置:
- 编译器路径:扩展会在此位置查询你的编译器,以获取系统库和编译器定义。
- IntelliSense 模式:模拟目标架构和编译器,以便扩展可以提供正确的 IntelliSense 并反映数据类型(如
pointer
、size_t
、long
等)的正确大小。
最低限度,设置 编译器路径 和 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 discussions 发起讨论;如果你发现需要修复的问题,请在 GitHub issues 提交问题。
- 探索 c_cpp_properties 架构。
- 查看 C++ 扩展概述。