配置 C/C++ IntelliSense
本文介绍如何配置C/C++扩展以在 Visual Studio Code 中提供 C++ 特定的IntelliSense建议。IntelliSense 是 VS Code 中内置的有用工具,它提供各种代码编辑功能,帮助您更快、更高效地编码。例如,代码完成、参数信息、语法突出显示、代码操作(灯泡)和成员列表都是使用 IntelliSense 生成的。
C/C++ IntelliSense 仅需要在您的系统上安装 C/C++ 编译器。C/C++ 编译器向 IntelliSense 提供 C++ 特定信息,例如系统包含路径的位置和其他设置。对于项目级别配置,请参考项目级别 IntelliSense 配置部分。
C/C++ 扩展何时会为我配置核心 IntelliSense 功能?
编译器是配置核心 IntelliSense 功能的唯一要求。为了识别 IntelliSense 的编译器,C/C++ 扩展会扫描计算机上的常见路径以查找编译器,例如 Clang、GCC、MinGW、cygwin、cygwin64 和 MSVC。如果这些编译器中的任何一个被识别并位于安全位置,它们就会自动配置为 IntelliSense。否则,将显示一条通知,要求您确认是否应针对 IntelliSense 配置此编译器。在这两种情况下,所选编译器也会设置为默认编译器。
如何检查IntelliSense是否配置
如果您没有配置 IntelliSense,C/C++ 扩展会在状态栏中显示一个黄色指示器,并带有标有“配置 IntelliSense”的警告标志。
要进行配置,请选择状态栏指示器,这会弹出配置“快速选择”。快速选择可以帮助您选择或安装 C/C++ 编译器。
如果您没有看到状态栏指示器,您还可以检查项目的c_cpp_properties.json
文件。此文件存储您的所有 IntelliSense 配置设置。通过从命令面板 ( ⇧⌘P (Windows、Linux Ctrl+Shift+P ) ) 选择C/C++: Edit Configurations (UI)导航到此文件。检查以找到您的配置。要了解有关该文件的更多信息,您可以查看架构参考。IntelliSense mode
c_cpp_properties.json
如何配置智能感知
IntelliSense 配置存储在c_cpp_properties.json
文件中,该文件是在您的工作区中自动创建的。以下所有三个选项都是编辑c_cpp_properties.json
文件的不同方式:
选项 1. 通过配置快速选择选择配置选项
通过在命令面板 ( ⇧⌘P (Windows、Linux Ctrl+Shift+P ) ) 中输入选择 IntelliSense 配置来打开快速选择,其中会显示一个下拉列表,其中包含计算机上 C/C++ 扩展找到的所有配置选项。
选择可用选项之一。如果您选择编译器,则 IntelliSense 默认使用该编译器。您可以随时返回“配置 IntelliSense快速选择”以更改用于配置 IntelliSense 的选项。
如果“快速选择”中没有可用的选项,则无法在您的系统中识别出任何编译器。您可以手动浏览您的机器或安装 C/C++ 编译器。要在 Windows 计算机上安装,请选择帮助我安装编译器选项,该选项会将您重定向到如何安装 C/C++ 编译器的分步演练。在 macOS 或 Linux 计算机上,选择安装编译器并根据提示进行导航,以在计算机上安装 C++ 编译器。
选项 2. 通过 UI 编辑您的 IntelliSense 配置
通过从命令面板 ( ⇧⌘P (Windows、Linux Ctrl+Shift+P ) ) 选择C/C++: 编辑配置 (UI)打开 IntelliSense 配置。该视图是文件的用户界面。c_cpp_properties.json
将编译器路径字段设置为用于构建项目的编译器的完整路径。例如,在 Linux 上使用 GCC 的默认安装路径时,编译器路径为/usr/bin/gcc
. 将IntelliSense 模式设置为您正在使用的编译器的特定于体系结构的变体。
选项3.直接编辑c_cpp_properties.json文件
您可以c_cpp_properties.json
直接编辑该文件来自定义您的配置。使用命令面板中的C/C++ 编辑配置 (JSON)命令 ( ⇧⌘P (Windows、Linux Ctrl+Shift+P ) ),然后在工作区的文件夹c_cpp_properties.json
中创建文件。.vscode
使用该compilerPath
变量添加编译器。该变量是您用来构建项目的编译器的完整路径。例如,在 Linux 上使用 GCC 的默认安装路径时,编译器路径为/usr/bin/gcc
.
有关该c_cpp_properties.json
文件的更多信息,请查看架构参考。
根据您的操作系统选择以下文件示例c_cpp_configuration.json
:
> Windows 上的示例 c_cpp_configuration.json
使用 MinGW 的默认安装路径:
{
"configurations": [
{
"name": "Win32",
"includePath": ["${workspaceFolder}/**"],
"defines": ["_DEBUG", "UNICODE", "_UNICODE"],
"windowsSdkVersion": "10.0.22621.0",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "${default}",
"compilerPath": "C:/msys64/mingw64/bin/gcc.exe"
}
],
"version": 4
}
> macOS 上的示例 c_cpp_configuration.json
使用 Clang 的默认安装路径:
{
"configurations": [
{
"name": "Mac",
"includePath": ["${workspaceFolder}/**"],
"defines": [],
"macFrameworkPath": [
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "macos-clang-arm64"
}
],
"version": 4
}
> Linux 上的示例 c_cpp_configuration.json
使用 GCC 的默认安装路径:
{
"configurations": [
{
"name": "Linux-GCC",
"includePath": ["${workspaceFolder}/**"],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": ["${workspaceFolder}"],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 4
}
项目级 IntelliSense 配置
使用编译器配置 IntelliSense 可为您提供核心 IntelliSense 功能。此设置称为基本配置。对于更复杂的使用场景,比如设置一个项目需要:
- 其他包含路径,例如对一个或多个不同库的引用
- 影响语言行为的特定编译器参数(因此影响 IntelliSense)
还有多种其他方法可以配置 IntelliSense。您可以通过以下方式提供这些附加配置:
- 文件
c_cpp_properties.json
及相关设置 - 另一个 VS Code 扩展形式的自定义配置提供程序(例如,Makefile 工具或CMake 工具扩展)
- 一个
compile_commands.json
文件
配置提供者
自定义配置提供程序是 VS Code 中的另一个扩展,它可能提供比 C/C++ 扩展更准确的 C++ IntelliSense 配置。例如,对于 CMake 或 Make 构建系统,其中Makefile 工具或CMake 工具扩展可以是配置提供程序。要将扩展添加为配置提供程序,请通过配置快速选择选择扩展,通过编辑高级设置下的配置提供程序字段将其添加到配置 UI ,或者将该字段添加到您的文件中。例如,对于 CMake 扩展,要添加的路径为.configurationProvider
c_cpp_properties.json
ms-vscode.cmake-tools
C/C++ 扩展会扫描您的系统以查找自定义配置提供程序。如果它仅标识一个自定义配置提供程序,则会自动为 IntelliSense 配置该配置提供程序。如果确定了多个配置提供程序,您需要通过打开配置快速选择来选择扩展应使用哪个。
compile_commands.json 文件
提供 IntelliSense 配置的另一个选项是compile_commands.json文件,它描述了项目中每个文件使用的确切编译命令。该文件通常由构建系统(例如 CMake 或 Bazel)通过在配置项目时设置命令行参数来生成。可以通过与如何配置 IntelliSensecompile_commands.json
部分中讨论的相同方法通过配置快速选择、通过 UI 编辑配置或直接编辑文件来选择文件进行配置。在配置 UI 中,可以在“高级配置”和“编译命令”字段下添加该文件。例如,如果您的文件位于工作区的根目录中,请在“编译命令”字段中输入。否则,可以使用配置属性直接将其添加到文件中。c_cpp_properties.json
compile_commands.json
${workspaceFolder}/compile_commands.json
c_cpp_properties.json
compileCommands
如果编译命令数据库不包含与您在编辑器中打开的文件相对应的翻译单元条目,c_cpp_properties.json
则会使用您的基本配置(在 中找到)(例如您的includePath
和defines
)。如果 C/C++ 扩展恢复为基本配置,语言状态栏指示器会在状态栏中显示“配置 IntelliSense”标签。
如果指定了自定义配置提供程序和compile_commands.json
文件,则首先会查询自定义配置提供程序以获取 IntelliSense 配置。
如果您的程序包含不在您的工作区中或不在标准库路径中的头文件,您可以修改Include Path。C/C++ 扩展通过查询Compiler path指定的编译器来填充包含路径。如果扩展找不到目标系统库的路径,您可以手动输入包含路径。
使用语言状态栏检查 IntelliSense 活动
您可以使用语言状态栏确定 IntelliSense 是否正在积极处理您的文件。要调用语言状态栏,请打开 C++ 文件。状态栏显示文本{} C++。将鼠标悬停在{}符号上可打开语言状态栏弹出窗口。弹出窗口中的顶部项目指示 IntelliSense 状态。以下是不同的状态及其含义:
- IntelliSense:就绪= IntelliSense 已针对 C/C++ 扩展进行配置,并且在您与编辑器交互(例如通过编写代码)时自动激活。
- IntelliSense:更新= IntelliSense 正在积极根据您对代码所做的更改来确定任何代码完成、语法突出显示等。
您可以选择语言状态栏弹出窗口中任何项目右侧的固定图标,将其永久固定到状态栏。
下一步
- 有关 IntelliSense 配置的更多信息,请参阅自定义默认设置。
- 如果您在配置设置时遇到问题,请在GitHub 讨论中发起讨论,或者如果您发现需要修复的问题,请在GitHub issues中提交问题。
- 探索c_cpp_properties 架构。
- 查看C++ 扩展概述。