Visual Studio Code,#include <stdio.h> 说“将包含路径添加到设置”
Posted
技术标签:
【中文标题】Visual Studio Code,#include <stdio.h> 说“将包含路径添加到设置”【英文标题】:Visual Studio Code, #include <stdio.h> saying "Add include path to settings" 【发布时间】:2016-09-28 02:16:04 【问题描述】:我正在尝试在 Visual Studio Code 中构建 C/C++。我安装了 C/C++ 和所有相关的扩展。
#include <stdio.h>
int main()
printf("Test C now\n");
return 0;
但#include <stdio.h>
下有一条绿线表示“将包含路径添加到设置”。当我点击它时,它会移动到“c_cpp_properties.json”。
如何以及在哪里可以在下面的配置中添加包含路径?
"configurations": [
"name": "Mac",
"includePath": ["/usr/include"]
]
【问题讨论】:
【参考方案1】:更当前的情况。 2018年,C++扩展在c_cpp_properties.json
文件的配置compilerPath
中增加了另一个选项;
compilerPath
(可选) 用于构建项目的编译器的绝对路径。该扩展将查询编译器以确定系统包含路径和用于 IntelliSense 的默认定义。
如果使用,则不需要includePath
,因为 IntelliSense 将使用编译器来确定系统包含路径。
原来,
如何以及在哪里可以在下面的配置中添加包含路径?
列表是一个字符串数组,因此添加包含路径看起来像这样;
"configurations": [
"name": "Mac",
"includePath": ["/usr/local/include",
"/path/to/additional/includes",
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include"
]
]
来源; cpptools blog 31 March 2016.
链接源有一个显示 Win32 配置格式的 gif,但同样适用于其他源。
如果安装了 Xcode,上述示例包括 SDK (OSX 10.11) 路径。
注意我发现一旦包含路径发生更改,更新可能需要一段时间。
cpptools 扩展名可以是found here。
关于 VSCode 中 C++ 语言支持的更多文档(来自 Microsoft)可以是 found here。
为了保存(来自讨论),以下是用于编译和执行 C++ 文件或 C 文件的 tasks.json 文件内容的基本 sn-ps。它们允许在文件名中使用空格(需要使用 \"
转义 json 中的附加引号)。外壳使用as the runner,从而允许程序的编译(clang...
)和执行(&& ./a.out
)。它还假设 tasks.json “存在”在本地工作区(在目录 .vscode 下)。进一步的 task.json 详细信息,例如支持的变量等,可以found here。
对于 C++;
"version": "0.1.0",
"isShellCommand": true,
"taskName": "GenericBuild",
"showOutput": "always",
"command": "sh",
"suppressTaskName": false,
"args": ["-c", "clang++ -std=c++14 -Wall -Wextra -pedantic -pthread \"$file\" && ./a.out"]
对于 C;
"version": "0.1.0",
"isShellCommand": true,
"taskName": "GenericBuild",
"showOutput": "always",
"command": "sh",
"suppressTaskName": false,
"args": ["-c", "clang -std=c11 -Wall -Wextra -pedantic -pthread \"$file\" && ./a.out"] // command arguments...
【讨论】:
我只想补充一点,我在这里找到了创建 c_cpp_properties.json、tasks.json 和 launch.json 的说明code.visualstudio.com/docs/languages/cpp 请记住,您可以使用/**
进行递归包含:"includePath":[ "C:/path/to/all/includes/**" ]
。
在较新版本的 C/C++ 扩展中,建议使用compilerPath
属性来设置系统包含/定义,而不是添加到includePath
属性中。
@Wyck。它是c_cpp_properties.json 文件对象的属性。
@arkady。它是 c_cpp_properties 文件的一部分。如果没有生成,您可以自己创建一个。有关更多详细信息,请参见此处code.visualstudio.com/docs/cpp/…【参考方案2】:
对于从谷歌上掉下来的每个人,在这里,这是 VSCode 1.40 (2019) 的修复:
打开全局 settings.json:文件 > 首选项 > 设置
然后选择“用户”选项卡,打开“扩展”部分,单击“C/C++”。然后滚动右侧面板,直到找到“在 settings.json 中编辑”按钮。
最后,添加“C_Cpp.default.includePath”部分。那里提供的代码来自我自己的系统(Windows 7)。您可以将其用作您自己的库路径的基础。 (记得将YOUR USERNAME
更改为您正确的系统(我的案例windows)用户名)
(编辑信息:我的方法的递归存在问题。VSCode 不喜欢同一事物的多个定义。我用"C_Cpp.intelliSenseEngine": "Tag Parser"
解决了它)
settings.json 上第 7 行之前的代码与 arduino 或 includePath 无关。你不能复制那个...
要添加到 settings.json 的 JSON 部分:
"C_Cpp.default.includePath": [
"C:/Program Files (x86)/Arduino/libraries/**",
"C:/Program Files (x86)/Arduino/hardware/arduino/avr/cores/arduino/**",
"C:/Program Files (x86)/Arduino/hardware/tools/avr/avr/include/**",
"C:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/5.4.0/include/**",
"C:/Program Files (x86)/Arduino/hardware/arduino/avr/variants/standard/**",
"C:/Users/<YOUR USERNAME>/.platformio/packages/framework-arduinoavr/**",
"C:/Users/<YOUR USERNAME>/Documents/Arduino/libraries/**",
"$workspaceFolder/libraries/**",
"$workspaceFolder/**"
],
"C_Cpp.intelliSenseEngine": "Tag Parser"
【讨论】:
在我的情况下,这并没有去掉#include <mysql.h>
的下划线,将settings.json
更改为:"C_Cpp.default.includePath": ["C:\\Program Files\\MariaDB\\MariaDB Connector C 64-bit\\include\\**"]
嗨@Lorenz。您确定标头 ( *.h ) 文件的路径正确吗?您确定它位于“Program Files”文件夹而不是“Program Files (x86)”吗?此外,斜杠应该是/
,而不是反斜杠``。
嗨@Vitox,是的,路径是正确的,它是外部安装的mariadb 连接器。斜线与 Windows 上的 \\ 相同(\ 是转义,因此我转义 \ 以实际看到它)。这绝对有效。当我更改 c_cpp_properties.json 中的 includePath 时,棉绒消失了(其他答案)。我在这里记录了这一点:***.com/questions/1985764/… 也许这也是一个特例?因为不添加 include 和 lib 路径作为参数,不管是否有 linting,它都不会编译。
@Vitox:谢谢。值得注意的是,我首先添加了我的包含目录没有添加最后一行"C_Cpp.intelliSenseEngine": "Tag Parser"
,它不起作用。添加后,效果很好。
为什么你有$workspaceFolder
而不是$workspaceFolder
【参考方案3】:
对于只有 Command Line Tools 而不是 Xcode 的 Mac 用户,请检查 /Library/Developer/CommandLineTools
目录,例如::
"configurations": [
"name": "Mac",
"includePath": [
"/usr/local/include",
// others, e.g.: "/usr/local/opt/ncurses/include",
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include",
"$workspaceFolder/**"
]
]
如果您安装了不同版本的命令行工具,您可能需要调整路径。
Note:您还可以通过命令面板 (⇧⌘P) 中的
C/Cpp: Edit Configurations
命令打开/生成c_cpp_properties.json
文件。
【讨论】:
在当前的 c_cpp_properties.json 文件中,它在文件顶部声明:“!!! WARNING !!!”:“请不要修改此文件!使用docs.platformio.org/page/projectconf/…”我'还确认了,在添加对此文件的引用时,它们可能会被删除【参考方案4】:在您的用户设置中添加:
"C_Cpp.default.includePath":["path1","path2"]
【讨论】:
这个,在另一个答案中提供的路径,加上'**'附加到最后,成功了! (例如:“C_Cpp.default.includePath”:[“C:/Users/Administrator/Documents/Arduino/libraries/**”]) @Votox 真正的答案! 对于 Mac 上的我自己,我必须准确了解头文件的位置,我无法用*
封装整个文件夹。例如我有一个我需要的头文件;我必须指定 VSCode 的头文件夹才能找到它:"C_Cpp.default.includePath":[ "/Users/Github/Learning/Cpp_repo/FreeStore/header/"
【参考方案5】:
这个答案可能迟了,但我只是碰巧解决了这个问题。 这是我的 c_cpp_properties.json 文件:
"configurations": [
"name": "Linux",
"includePath": [
"$workspaceFolder/**",
"/usr/include/c++/5.4.0/",
"usr/local/include/",
"usr/include/"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "clang-x64"
],
"version": 4
【讨论】:
compilerPath
是要走的路。您应该从 includePath
属性中删除系统包含路径。
这个文件在磁盘上的什么位置?
@Bob Brown:我还没有用 compilerPath 解决它,我根本不知道它应该如何工作。我在 Windows 上使用 MinGW,compilerPath 需要 mingw 并且是单个字符串。官方文档只提到了c_cpp_configurations.json中的includePath:如果你的程序包含不在你的工作空间或标准库路径中的头文件,你只需要添加到Include path数组设置中即可。见:code.visualstudio.com/docs/cpp/config-msvc 所以为什么说这个答案没用是因为它重复了上面的答案,但它仍然是正确的。【参考方案6】:
为您的项目配置标准头文件的最佳方法是将compilerPath
属性设置为c_cpp_properties.json
文件中的配置。不建议将系统包含路径添加到includePath
属性。
如果您不想使用c_cpp_properties.json
,另一个选项是设置C_Cpp.default.compilerPath
设置。
【讨论】:
是否有 globalc_cpp_properties.json
文件?我似乎记得有一个,在~/.vscode/
或者~/.vscode-oss/
下(在linux上);现在我没有看到。
不,没有全局c_cpp_properties.json
文件。不过,您可以使用C_Cpp.default.*
设置来实现类似的效果。
我认为这个答案使用了一个令人困惑的表达方式,也许只是我的英语不好?我发现这更容易理解,在这里复制@Bob Brown 在***.com/questions/37522462/… 中的评论:“在较新版本的 C/C++ 扩展中,建议使用 compilerPath 属性来设置系统包含/定义而不是将它们添加到includePath 属性。”【参考方案7】:
我通过卸载我最近安装的 Visual Studio 解决了这个问题。
【讨论】:
这是您解决方案的全部内容吗?你改用什么了? 是的。我已经在 Visual Studio Code 上安装了 Visual Studio,我认为这对 VS Code 起到了作用,因为只需卸载 VS,VSCode 就开始运行和调试代码。【参考方案8】:我的 c_cpp_properties.json 配置-
"configurations": [
"name": "Win32",
"compilerPath": "C:/MinGW/bin/g++.exe",
"includePath": [
"C:/MinGW/lib/gcc/mingw32/9.2.0/include/c++"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64"
],
"version": 4
【讨论】:
【参考方案9】:我试过了,现在可以工作了
Configuration for c_cpp_properties.json
"configurations": [
"name": "Win32",
"compilerPath": "C:/MinGW/bin/g++.exe",
"includePath": [
"C:/MinGW/lib/gcc/mingw32/9.2.0/include/c++"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64"
],
"version": 4
task.json configuration
文件
"version": "2.0.0",
"tasks": [
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "C:\\MinGW\\bin\\g++.exe",
"args": [
"-g",
"$file",
"-o",
"$fileDirname\\$fileBasenameNoExtension.exe"
],
"options":
"cwd": "C:\\MinGW\\bin"
,
"problemMatcher": [
"$gcc"
],
"group":
"kind": "build",
"isDefault": true
,
"detail": "compiler: C:\\MinGW\\bin\\g++.exe"
]
【讨论】:
【参考方案10】:在设置中,转到c_cpp_properties.json
将设置更改为:
【讨论】:
【参考方案11】:好的,我的 VS Code 也遇到了类似的问题,这就是我的理解,
您的 C/C++ 代码运行器扩展的默认包含路径值为 $workspaceFolder/**
。这将对工作区文件夹中的库头函数文件进行自上而下的递归搜索,这将要求您在所有工作文件夹中保留所有库头函数文件的副本。我在下面写了对我有用的解决方案。
Step:1这个问题可以通过简单地右击波浪线下的灯泡(发生错误的地方)并点击“编辑包含路径设置”来解决。
Step:2现在向下滚动到“包含路径”部分,将路径的值添加到编译器文件夹并添加/**
以在所有分支文件夹中启用递归搜索。如果出于任何原因您将库头文件存储在其他地方,请添加该路径。您还可以通过添加存储头文件的文件夹的确切值来更精确。
就是这样!现在你不应该再得到那个波浪线错误了! No more Swiggly Lines!
【讨论】:
【参考方案12】:我使用的是旧版本的 VS Code (1.48.1)。这个答案为我解决了文件不生成 IntelliSense 信息的问题(与问题中的基本问题相同)。如果重置 IntelliSense 还不够(Ctrl+Shift+P → C/C++: Reset IntelliSense database
;它不适合我),试试这个:
确保文件中没有红色曲线(解析错误),尤其是在 #include
指令上。解决包含问题的最佳方法是在工作区中声明更多包含目录。 (我看到了很多关于如何在系统/用户范围内执行此操作的答案,但只有关于如何在每个工作区执行此操作的不完整答案。)通过在工作区目录中生成一个 c_cpp_properties.json 文件来做到这一点(我的似乎没有已经拥有一个):Ctrl+Shift+P → C/C++: Edit Configurations (JSON)
。将路径添加到includePath
,直到所有包含错误在有问题的文件及其包含的所有文件中都消失。使用变量$workspaceFolder
来引用工作区的根目录。顺便说一句,我的默认情况下在includePath
中只有$workspaceFolder/**
,它应该递归地搜索整个工作区文件夹以查找包含文件。它对我不起作用,至少在一个特定文件上。我必须在$workspaceFolder
下显式添加更多目录,以便 VS Code 找到一些包含。我对标准库包含没有任何问题。所以,这个答案没有解决这些问题。
您可能需要再次重置 IntelliSense 数据库并重新启动 VS Code,然后它才能开始正确显示所有 IntelliSense 信息。我还发现它似乎有助于打开它正在寻找的包含文件以帮助它找到文件。我希望这继续为我工作。到目前为止一切顺利。
【讨论】:
【参考方案13】:我使用的是 MAC M1,在使用 VS 代码编写 c++ 程序时发生此错误。 Mac已经预装了c++编译器,主要是clang而不是gcc。我的问题发生是因为我试图包含 clang 编译器不支持的
-
如果没有安装Xcode,请先安装。
不要使用 #include
【讨论】:
以上是关于Visual Studio Code,#include <stdio.h> 说“将包含路径添加到设置”的主要内容,如果未能解决你的问题,请参考以下文章
visual studio 和visual studio code 的区别
visual studio 和visual studio code 的区别
开发环境Ubuntu 安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Ubuntu 安装 deb 包 )