Visual Studio代码includePath


76

我正在尝试在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"]
    }
]

Answers:


59

如何在以下配置中以及在何处添加包含路径?

该列表是一个字符串数组,因此添加一个include路径将类似于:

"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博客,2016年3月31日

链接的源有一个gif,显示了Win32配置的格式,但其他情况也是如此。

如果安装了Xcode,则以上示例包括SDK(OSX 10.11)路径

注意,我发现更改包含路径后可能需要一段时间才能更新。

可以在此处找到cpptools扩展名。

可以在VSCode上找到有关C ++语言支持的更多文档(来自Microsoft)。


在2018年期间,C ++扩展compilerPathc_cpp_properties.json文件的配置添加了另一个选项;

compilerPath(可选)用于构建项目的编译器的绝对路径。该扩展将查询编译器,以确定系统包含路径和默认定义以用于IntelliSense。

如果使用,includePath则将不需要,因为IntelliSense将使用编译器找出系统包含路径。


为了保留(出于讨论目的),以下是task.json文件内容的基本摘要,以编译和执行C ++文件或C文件。它们允许在文件名中留空格(要求使用来转义json中的其他引号\")。壳使用作为流道,从而允许汇编(clang...)和执行(&& ./a.out该程序的)。它还假定task.json“存在”于本地工作空间(在目录.vscode下)。更多task.json详细信息,例如受支持的变量等,可以在这里找到

对于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... 
}

4
我只想补充一点,我在这里找到了创建c_cpp_properties.json,tasks.json和launch.json的说明code.visualstudio.com/docs/languages/cpp
agwntr

3
请注意,您可以将其/**用于递归包括:"includePath":[ "C:/path/to/all/includes/**" ]
Danijel

1
在较新版本的C / C ++扩展中,建议使用compilerPath属性来设置系统的包含/定义,而不是将它们添加到includePath属性中。
鲍勃·布朗

1
@Wyck。它是c_cpp_properties.json文件的对象的属性。
Niall

1
@arkady。它是c_cpp_properties文件的一部分。如果未生成,则可以自己创建一个。详情请参阅此处code.visualstudio.com/docs/cpp/…–
Niall,

32

对于每个脱离Google的人来说,这是VSCode 1.40(2019)的修复程序:

打开全局settings.json:文件>首选项>设置

打开全局settings.json:文件>首选项>设置

然后选择选项卡“用户”,打开“扩展”部分,单击“ C / C ++”。然后滚动右面板,直到找到“在settings.json中编辑”按钮。

然后选择选项卡“用户”,打开“扩展”部分,单击“ C / C ++”。 然后滚动右面板,直到找到“在settings.json中编辑”按钮。

最后,添加“ C_Cpp.default.includePath”部分。那里提供的代码来自我自己的系统(Windows 7)。您可以将其用作自己的库路径的基础。(请记住,将其更改YOUR USERNAME为正确的系统(我的案例窗口)用户名)
(编辑信息:我的方法的递归存在问题。VSCode不喜欢同一件事的多个定义。我用来解决了"C_Cpp.intelliSenseEngine": "Tag Parser"

最后,添加“ C_Cpp.default.includePath”部分。 那里提供的代码来自我自己的系统(Windows 7)。 您可以将其用作自己的库路径的基础。 (请记住,将您的用户名更改为正确的系统(在我的案例窗口中)用户名)

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\\**"]
questionto42

嗨@Lorenz。您确定头文件(* .h)的路径正确吗?您确定它在“ Program Files”文件夹中,而不在“ Program Files(x86)”中吗?另外,斜杠应该是/一个,而不是反斜杠``。
维托克斯

@Vitox,您好,是的,路径正确,它是mariadb的外部安装连接器。该斜杠与Windows上的\\相同(\是转义符,因此我实际上是转义\)。这绝对有效。当我改为更改c_cpp_properties.json中的includePath时,棉绒消失了(其他答案)。我已经在这里记录了这一点:stackoverflow.com/questions/1985764/…也许这也是特例?因为不将include和lib路径添加为参数,无论是否添加,无论如何都不会编译。
问题

14

对于仅具有命令行工具而不是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}/**"
    ]
}]

如果安装了不同版本的命令行工具,则可能需要调整路径。

注意:您也可以c_cpp_properties.json通过C/Cpp: Edit Configurations命令面板(⇧⌘P)中的命令打开/生成文件。


在当前的c_cpp_properties.json文件中,它在文件顶部声明:“ !!!警告!!!”:“请不要修改此文件!请使用docs.platformio.org/page/projectconf/… ” ve还确认,在添加对此文件的引用时,它们可以被删除
CrazyMerlin

6

在您的用户设置中添加:

"C_Cpp.default.includePath":["path1","path2"]

2
这样,在另一个答案中提供了路径,并在末尾加上“ **”,就成功了!(例如:“ C_Cpp.default.includePath”:[“ C:/ Users / Administrator / Documents / Arduino / libraries / **”])
Vitox

@Votox真正的答案!
degski '20

2

为项目配置标准标头的最佳方法是将compilerPath属性设置为c_cpp_properties.json文件中的配置。不建议将系统包含路径添加到该includePath属性。

如果您不想使用的另一种选择c_cpp_properties.json是设置C_Cpp.default.compilerPath设置。


是否有全局 c_cpp_properties.json文件?我似乎记得在linux下~/.vscode/~/.vscode-oss/在Linux上有一个。现在我看不到。
Marc.2377 '19

不,没有全局c_cpp_properties.json文件。您可以使用这些C_Cpp.default.*设置来达到类似的效果。
鲍勃·布朗

我认为这个答案使用了令人困惑的表达方式,也许只是我的英语不好?我发现这更好理解了,在这里将@Bob Brown的评论复制到stackoverflow.com/questions/37522462/…:“在较新版本的C / C ++扩展中,建议使用compilePath属性设置系统包含/定义而不是将其添加到includePath属性。”
questionto42

1

这个答案可能很晚,但我刚好解决了这个问题。这是我的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属性中删除系统包含路径。
鲍勃·布朗

该文件在磁盘上的什么位置?
Marc.2377 '19

@Bob Brown:我还没有使用CompilerPath解决它,我也不知道它应该如何工作。我在Windows上使用MinGW,compilerPath需要mingw,并且是单个字符串。官方文档仅引用c_cpp_configurations.json中的includePath: 如果程序包含不在工作空间或标准库路径中的头文件,则仅需要添加到“包含路径数组”设置。请参阅:code.visualstudio.com/docs/cpp/config-msvc因此,为什么说此答案无用,是因为它重复了上面的答案,但仍然是正确的。
questionto42

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.