如题,如图,本该是完全正确的工程,但clangd提示却错了,报错出在iostream内部,没有找到某个头文件,由于我配置了clangd使用生成的compile_commands.json,所以应当是这个文件出现了问题

随后我新建了xmake工程,设置生成compile_commands.json,build然后clangd restart,clangd提示正常了

查看两个示例项目的compile_command
[
{
"directory": "C:/Users/yuan/Desktop/cmake-test/build",
"command": "D:\\MICROS~3\\18\\ENTERP~1\\VC\\Tools\\MSVC\\1451~1.362\\bin\\Hostx64\\x86\\cl.exe /nologo /TP -W4 -WX- -permissive- -EHsc -utf-8 -GS -guard:cf -Zi -Od -MDd -RTC1 -D_DEBUG -fp:precise -Oy- -std:c++latest /FoCMakeFiles\\cmake-test.dir\\main.cpp.obj /FdCMakeFiles\\cmake-test.dir\\ /FS -c C:\\Users\\yuan\\Desktop\\cmake-test\\main.cpp",
"file": "C:/Users/yuan/Desktop/cmake-test/main.cpp",
"output": "C:/Users/yuan/Desktop/cmake-test/build/CMakeFiles/cmake-test.dir/main.cpp.obj"
}
]
[
{
"directory": "c:\\Users\\yuan\\Desktop\\xmake-test",
"arguments": ["D:\\Microsoft Visual Studio\\18\\Enterprise\\VC\\Tools\\MSVC\\14.51.36231\\bin\\HostX64\\x64\\cl.exe", "/c", "/nologo", "/MDd", "/Zi", "/FS", "/Fdbuild\\windows\\x64\\debug\\compile.xmake-test.pdb", "/Od", "/EHsc", "/Fobuild\\.objs\\xmake-test\\windows\\x64\\debug\\src\\main.cpp.obj", "src\\main.cpp", "-imsvc", "D:\\Microsoft Visual Studio\\18\\Enterprise\\VC\\Tools\\MSVC\\14.51.36231\\include", "-imsvc", "D:\\Microsoft Visual Studio\\18\\Enterprise\\VC\\Tools\\MSVC\\14.51.36231\\ATLMFC\\include", "-imsvc", "D:\\Microsoft Visual Studio\\18\\Enterprise\\VC\\Auxiliary\\VS\\include", "-imsvc", "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.26100.0\\ucrt", "-imsvc", "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.26100.0\\\\um", "-imsvc", "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.26100.0\\\\shared", "-imsvc", "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.26100.0\\\\winrt", "-imsvc", "C:\\Program Files (x86)\\Windows Kits\\10\\\\include\\10.0.26100.0\\\\cppwinrt", "-imsvc", "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8.1\\include\\um"],
"file": "src\\main.cpp"
}]
可以看到xmake生成的比cmake生成的详细许多,包含了windows kits、msvc的include和链接的运行时等信息。至此真相大白。
那么对于cmake工程的clangd提示错误该怎么解决呢?
ai给了种做法,从Develop Powershell for VS终端里启动code,即可让vscode继承此终端的环境变量,然后再打开那个cmake工程,报错消失了
我的做法:
感觉每次从那个终端里启动code有点限制了我们,所以把加载VS环境变量的脚本写入到终端的profile里我们随意从某个终端里启动code都可以了(但是对于任务栏和快捷方式启动的还是没什么好办法)