什么是正确的 macOS vscode 智能感知C++包含标准库的路径?



我在macOS Sierra上使用Visual Studio Code 1.14.2并安装了Microsoft C/C++ms-vscode.cpptools扩展,但是在设置包含路径以使IntelliSense正确检查标准库标头时遇到问题,而不会产生错误并回退到"标记解析器"机制。

此 vscode 版本的默认c_cpp_properties.json包含以下内容:

{
"configurations": [
{
"name": "Mac",
"includePath": [
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
"/usr/local/include",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.1.0/include",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
"/usr/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
"/usr/local/include",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.1.0/include",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
"/usr/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
...
}

例如,使用一个简单的C++文件,例如:

#include <exception>
int main() {
return 0;
}

#include <exception>带有下划线。将鼠标悬停在其上状态:

文件:"file:///path/to/vscode.cc" 严重性:"信息" 消息:"检测到 #include 错误。请更新您的包含路径。此翻译单元(/path/to/vscode.cc(的 IntelliSense 功能将由标记解析器提供。 在: '1,1' 来源: ''

文件:"file:///path/to/vscode.cc" 严重性:"信息" 消息:"无法打开源文件"endian.h"("异常"的依赖关系(" 在: '1,1' 来源: ''

我在文件系统中搜索了endian.h。删除似乎与主机开发实际相关的可能性(即放弃iOS/WatchOS/等(:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/i386/endian.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/machine/endian.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/i386/endian.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/machine/endian.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/i386/endian.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/machine/endian.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/i386/endian.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/endian.h
/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/i386/endian.h
/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/machine/endian.h
/usr/include/i386/endian.h
/usr/include/machine/endian.h

有谁知道此问题的正确解决方法是什么?

事实证明,这是IntelliSense引擎中的一个配置错误。 Mac 标头期望定义符号__LITTLE_ENDIAN__,但事实并非如此。 我们已在扩展的最新更新中更正了此问题,因此无需再添加指向 endian.h 的路径。

最新更新