我完全是一个使用Visual Studio代码的初学者,我完全不知道我在做什么。
我到处搜索(可能还不够),但我找不到像我这样的人如何配置c_cpp_properties.json
文件的简单解释,每当我单击带有绿色蠕动下划线的行旁边的黄色灯泡时,我就会被重定向到该文件。
我只想知道要在.json
中放入什么才能使IntelliSense正常工作。
发布于 2017-12-29 06:56:40
C/C++扩展的官方文档中的
:
为获得更好的IntelliSense结果配置includePath
如果在Visual Studio代码中打开文件夹时看到以下消息,则表示C++ IntelliSense引擎需要有关包含文件所在路径的其他信息。
在哪里定义了包含路径?
包含路径在名为c_cpp_properties.json的文件的"includePath"
设置中定义,该文件位于打开的文件夹中的.vscode目录中。
您可以使用命令调色板中的"C/Cpp: Edit Configurations"
命令或通过在灯泡菜单中选择"Edit "includePath" setting"
来创建或打开此文件(请参见下面的屏幕截图)。定位灯泡的最快方法是滚动到源文件的顶部,然后单击显示在#include语句下的任何绿色曲折。
打开文件夹时,扩展会尝试根据您的操作系统查找系统头文件,但不知道您的项目所依赖的任何其他库。您可以将鼠标悬停在绿色的波浪线上,或者打开Problems窗口来了解IntelliSense引擎无法打开哪些头文件-有时是无法定位的从属头文件。
如何指定包含路径?
您可以使用下面介绍的技术之一指定其余路径。
该扩展可以从compile_commands.json文件中获取"includePath"
和"defines"
的信息,该文件可以由许多构建系统自动生成,如CMake和忍者。查找定义当前配置的部分(默认情况下,每个操作系统都有一个配置,例如"Win32“或"Mac"),并将c_cpp_properties.json中的"compileCommands"
属性设置为compile_commands.json文件的完整路径,扩展模块将使用该属性而不是IntelliSense.的"includes"
和"defines"
属性
要尝试的第一件事是利用灯泡路径建议自动解析包含路径。打开文件夹时,扩展模块将根据c_cpp_properties.json.中的"browse.path"
设置设置的路径,以递归方式搜索与您的代码正在使用的头文件相匹配的潜在包含路径单击#include statements下面的绿色曲折图标,您将看到一个灯泡,提供允许IntelliSense解析所包含文件的路径建议。
如果在灯泡中看不到路径建议,请尝试将标头可能所在的根文件夹添加到c_cpp_properties.json.中的"browse.path"
设置中这允许在这些文件夹中进行递归搜索的扩展,并在搜索过程中提供更多建议。
如果上述方法都不能完全解析路径,则可以在c_cpp_properties.json文件中手动指定项目所依赖的标头的路径。查找定义当前配置的部分(默认情况下,每个操作系统都有一个配置,比如"Win32“或" Mac "),然后在"includePath"
设置中添加路径,并在"defines"
设置中定义。
另外,对于MinGW,as the documentation of the extension explains您可以要求gcc/g++列出它自己的包含文件:
gcc -v -E -x c++ nul
验证是否正确解析了包含路径
有两种方法可以验证是否正确解析了包含路径:
这表明IntelliSense引擎已经解析了包含路径,因此您可以开始享受当前翻译单元的C或C++代码的完整IntelliSense。请注意,如果其他文件属于需要配置其他包含路径的不同转换单元,则您可能仍会在这些文件上看到错误。
如果这不能解决你的问题,那么,检查下面的MinGW配置,并尝试为相应的/相似的头文件和文件夹设置合适的安装位置。
发布于 2017-09-17 05:08:40
来自
下面您可以看到,MinGW C++ include路径已添加到browse.path
Windows:
{
"name": "Win32",
"includePath": [
"${workspaceRoot}"
],
"defines": [
"_DEBUG",
"UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"${workspaceRoot}",
"C:\\MinGW\\lib\\gcc\\mingw32\\6.3.0\\include\\c++"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
发布于 2021-09-17 08:41:55
如果设置正确,VSCode可以很好地询问编译器它正在使用哪些包含路径。我的项目的一部分使用了基于GCC的数字信号处理器编译器,因此通过将"-v“添加到编译器的标志(我把它放在Makefile的CFLAGS中),我能够看到内部命令行,它揭示了”秘密“标志被传递到较低的编译器级别。这向我展示了需要添加到配置的“定义”部分的"-D“值,更重要的是,"-isystem”被用来设置系统包含目录。我在我的c_cpp_properties.json中得到了这个:-
{
"configurations": [
{
"name": "CEVA-V15",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"CEVAXC323",
"XC323_CEVA"
],
"compilerPath": "/devtools/CEVA-ToolBox/V15/CEVA-XC/cevaxccc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-arm",
"compilerArgs": [
"-isystem /devtools/CEVA-ToolBox/V15/CEVA-XC/include"
]
}
]
}
https://stackoverflow.com/questions/46258143
复制相似问题