如何在Mac上使用VS Code处理C++头文件#include错误?

7
在我的Mac上使用VS Code时,对于头文件和第三方库(在这种情况下是wxWidgets),会出现#include错误。我阅读了所有能找到的内容,在"c_cpp_properties.json"中调整了"includePath"设置,但没有任何帮助。
头文件位于与.cpp文件相同的文件夹("/src/")中。该项目构建和运行良好,但VS Code会产生#include错误,并且错误标记覆盖整个项目。
以下是屏幕截图和具有VS Code设置的JSON文件。 #include error screenshot

c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/src",
                "${workspaceFolder}/**",
                "/usr/local/Cellar/wxmac/3.0.5.1/include/wx-3.0"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
            ],
            "compilerPath": "/usr/bin/g++",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}

请帮我梳理一下。
————— 更新 —————
建议我在c_cpp_properties.json中使用以下设置:
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**",
                "${vcpkgRoot}/x64-osx/include",
                "/usr/local/Cellar/wxmac/3.0.5/**"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}

#include错误已经消失,但第三方库(“WX”)的错误仍然存在。在上面的JSON中,“includePath”中写有“${vcpkgRoot}/x64-osx/include”的行。
这是vcpkg包,它可以帮助轻松安装第三方库。
在安装了vcpkg后,我通过vcpkg安装了wxWidgets,但该库在VS Code中没有链接(虽然构建非常好),并且我得到了如下屏幕截图所示的错误波浪线:

see squiggles – the library is an alien object for VS Code :(

请您解释如何解决这个问题?

不相关。这是默认的颜色方案吗? - Evg
我在Linux上使用CMake项目和C++ Intellisense时遇到了类似的问题。因此,我转用clangd并停用了C++ Intellisense。编译器使用CMake提供的设置,因此编译正常,但给予实时反馈的插件也需要获取该信息,例如通过读取compile_commands.jsonc_cpp_properties.json来实现,但我不确定为什么有时候C++ Intellisense会出现故障。但是如果您不使用clang构建代码,则clangd也会存在问题。 - t.niese
1
@Evg,不,它叫做“Oceanic Next Bimbo”。 - Fillyjonk
谢谢,@t.niese - Fillyjonk
我看到的一件事是,您选择了clang 11作为CMake的Kit,但在设置中,您有"compilerPath": "/usr/bin/g++",也许这就是问题的原因。您还可以检查VSCode中的“输出”选项卡以查看不同的输出,也许其中一个可以给出有关问题的线索。 - t.niese
显示剩余2条评论
2个回答

2

includePath 属性中,在你的目录路径的末尾添加 **:

...
"includePath": [
    "${workspaceFolder}/src/**",
    "${workspaceFolder}/**",
    "/usr/local/Cellar/wxmac/3.0.5.1/include/wx-3.0/**"
 ],

您可以在文档中查看有关c_cpp_properties.json的更多详细信息。


谢谢,@jpuriol。不幸的是,这并没有解决问题。相反,可能是由于我的Mac上构建的WxWidgets库存在问题 :( - Fillyjonk

0
问题的根源在于WxWidgets库中defs.h文件中的几个环境变量。为了使VS Code在我的系统(OS X 10.14 Mojave)上识别它们,我不得不以以下方式在c_cpp_properties.json文件中添加"defines"
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/src/**",
                "/usr/local/include/wx-3.1/**",
                "/usr/local/lib/wx/include/osx_cocoa-unicode-3.1",
                "/usr/local/lib/wx/**"
            ],
            "defines": [
                "WX_PRECOMP",
                "__WXOSX_COCOA__",
                "_FILE_OFFSET_BITS=64",
                "__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=1"                
            ],
            "forcedInclude": [],
            "macFrameworkPath": [],
            "compilerPath": "/usr/local/bin/gcc-9",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

这个解决方案仅适用于Mac。如果您在其他操作系统上遇到相同的包含错误或者类名下有波浪线,请在这个GitHub仓库中查找c_cpp_properties.json文件的属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接