前辈们,lsp-clangd 如何配置 msvc ?

萌新正在尝试入教(纯CPP开发),遇到以下问题,如果是Stupid Question,还望大佬们指明努力的方向。

1.CMake中选用MSVC作为编译工具链,生成的compile_commands.json似乎clangd不支持,会提示LSP :invalid AST。

选用MinGW GCC作为编译工具链时,生成的json文件可以用于跳转和补全;但问题是编译器预设的宏不是我想要的,例如:

开发Win32平台产品,还是要用msvc的;写条件编译的时候有点尴尬(使能了GCC的编译器宏)。

2.上图中,有没有办法让"int aInteger;"(被宏关闭的代码)灰色显示?

3.上图中包含这个文件的全部代码,但输入"bInt"时会出现很多与本文件无关的选项。
compile_commands.json所含文件中定义的符号都在补全范围内,与是否include某文件无关。

4.有没有前辈评价一下在emacs中使用cdb调试程序

目前QtCreator不存在以上问题,但QtCreator没有org-mode。
或者把QtCreator的工程、补全插件封装成dynamic module供emacs调用,
还是直接把emacs界面嵌入进QtCreator?

谢谢。

找到两篇看似相关的文章,未经验证:

感谢您的回复,两篇都看了。

有点怀疑用msvc时,虽然生成了compile_commands.json,cl编译器不会给clangd生成有用的信息。
如果用SourceTrail生成compile_commands.json,可能跟GCC类似。

{
“directory”: “C:/Users/Administrator/Documents/GitHub/build-libuv-VS2015-Release with Debug Information”,
“command”: “C:\msys64\mingw64\vc\cl.exe @<< /nologo -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0600 -IC:\Users\Administrator\Documents\GitHub\libuv\include -IC:\Users\Administrator\Documents\GitHub\libuv\src /DWIN32 /D_WINDOWS /W3 /MD /Zi /O2 /Ob1 /DNDEBUG /W4 /FoCMakeFiles\uv_a.dir\src\idna.c.obj /FdCMakeFiles\uv_a.dir\uv_a.pdb /FS -c C:\Users\Administrator\Documents\GitHub\libuv\src\idna.c <<”,
“file”: “C:/Users/Administrator/Documents/GitHub/libuv/src/idna.c”
}

建议使用 ccls。如果你用msvc工具链,要想有更好的体验,需要自己用msvc编译ccls,编译方法可以查看 ccls的wiki。也可以尝试用一下我编译的二进制文件:ccls.exe

以你图中的例子的效果如下:

生成compile_commands.json 的方法:

cmake -H. -Bbuild -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_COMPILER=cl -DCMAKE_C_COMPILER=cl

生成的compile_commands.json 的内容:

[
{
  "directory": "D:/Code/CCPro/Test/build",
  "command": "C:\\PROGRA~2\\MICROS~2\\2019\\COMMUN~1\\VC\\Tools\\MSVC\\1421~1.277\\bin\\Hostx64\\x64\\cl.exe  /nologo /TP   /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1   /FoCMakeFiles\\main.dir\\main.cpp.obj /FdTARGET_COMPILE_PDB /FS -c D:\\Code\\CCPro\\Test\\main.cpp",
  "file": "D:/Code/CCPro/Test/main.cpp"
}
]
3 个赞

感谢您的恢复,问题解决了。

(当初为了省事,直接在MSYS2中编译了ccls,然后用msvc生成的json测试。。。反省)

求教,你用cmake怎么是用msvc生成json文件的啊,不用那个SourceTrail,我记得cmake不支持msvc生成json文件啊

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
用现代版本的CMake,会在构建目录中生成compile_commands.json文件。

我用的3.12还不够新吗

你用的nmake吧,我以为是vs呢

This option is implemented only by Makefile Generators and the Ninja . It is ignored on other generators.