我目前在 macOS Ventura 13.6.5 上使用 Visual Studio Code。我创建了一个 C/C++ 项目并将 G++ 设置为我的编译器。我已经使用 Makefile 定义了构建设置,一切正常,这意味着我的项目现在可以正确编译。
但是,我在配置 Intellisense 工具来帮助我完成代码完成、错误检测和其他功能时遇到了问题。具体来说,我遇到了 C++ 标准标头的包含错误,如
<string>
和 <vector>
,如附图所示。
以下是我的
c_cpp_properties.json
文件的内容:
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/Cellar/gcc/13.2.0/include/c++/13/tr1",
"/usr/local/Cellar/gcc/13.2.0/lib/gcc/current/gcc/x86_64-apple-darwin22/13/include/ssp",
"/usr/local/Cellar/gcc/13.2.0/lib/gcc/current/gcc/x86_64-apple-darwin22/13/include-fixed",
"${workspaceFolder}/src/Solution"
],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
正如您在我的
c_cpp_properties.json
上看到的,我尝试定义 compilerPath
变量来指向我正在使用的编译器,在本例中为 g++
。我已经确认编译器的路径是正确的。
我还尝试确保将
gcc
标题包含到 includePath
中。为了找到我的 gcc
标头所在的位置,我执行了以下命令:
gabriel@pandora ssp % sudo find /usr -name stdio.h
Password:
/usr/local/Cellar/gcc/13.2.0/include/c++/13/tr1/stdio.h
/usr/local/Cellar/gcc/13.2.0/lib/gcc/current/gcc/x86_64-apple-darwin22/13/include/ssp/stdio.h
/usr/local/Cellar/gcc/13.2.0/lib/gcc/current/gcc/x86_64-apple-darwin22/13/include-fixed/stdio.h
但是,由于某种原因,IntelliSense 拒绝从
c_cpp_properties.json
获取我的设置,而是尝试重新使用 clang
设置。至少这是我在重新启动 Visual Studio 并查看输出面板上的以下消息后的理解:
这里有人知道如何解决这个问题吗?任何提示将不胜感激。
谢谢,
编辑:
我能够使用此处提供的链接解决标题问题。然而,这导致了另一个问题,即有效代码的后续构建错误。我怀疑 Intellisense 要么试图检查 C 代码,而我的程序是用 C++ 编写的,要么是其他我不知道完全错误的东西。
我将不胜感激任何提示或可能的解决方案。
谢谢,
我敢打赌 /usr/bin/g++ 指向 Apple Clang(运行
/usr/bin/g++ --version
),而你自制安装的 GCC 位于 /opt/ 或 /usr/local/cellar 或其他位置。换句话说,如果您想要自制 GCC,请实际指向它而不是 Apple Clang。所以在很大程度上我怀疑这是重复的 Mac clang 安装似乎覆盖了 GCC 安装。
对于问题的 VS Code 特定方面,如果您在 c_cpp_properties.json 中正确指定
compilerPath
,则不需要在 includePath
中指定工具链的系统标头 - cpptools 应该能够查询它们(请参阅https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference)。