近来vscode的clangd对msvc的cmake工程提示有误

yuan jddφθτ 2026-07-02 15:01 1

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


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


查看两个示例项目的compile_command



  • cmake


[
{
"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"
}
]


  • xmake


[
{
"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都可以了(但是对于任务栏和快捷方式启动的还是没什么好办法)

最新回复 (5)
  • Firefox‎ 07-02 15:04
    1

    这个问题我以前折腾过

    太痛苦了



    compile_commands.json



    就这个东西难搞的要命


    后来我想开了

    要么直接在win上用vs,要么在mac/linux上写跨平台的代码

    其实还有种办法,放弃clangd,这东西烦得很,补全质量其实也一般

  • rainbowfish 07-02 15:20
    2

    第一个没有正确包含msvc的crt/stl头文件目录

  • Vincent X 07-02 15:32
    3

    你的 CMakeLists.txt 是怎样写的?我尝试复现帖子里的问题但没有成功。Clangd(由 VSCode 的插件安装)可以正常解析头文件。 ^-^

  • Firefox‎ 07-02 15:45
    4

    compile_commands.json



    对啊,win上用msvc的话是没这个的啊

    不太懂


    我刚也试了一下,用AI生成cmakelists很轻松,现在真的好爽,以前还要去网上到处复制

  • Firefox‎ 07-02 15:51
    5





    可以的啊

    现在有了ai简直随便玩


    配置这个不要太轻松了

    以前可折腾死我了,配置含义靠猜,遇到一个诡异的问题靠爬帖子

* 帖子来源Linux.do
返回