tsing
1
萌新正在尝试入教(纯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?
谢谢。
tsing
3
感谢您的回复,两篇都看了。
有点怀疑用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 个赞
tsing
5
感谢您的恢复,问题解决了。
(当初为了省事,直接在MSYS2中编译了ccls,然后用msvc生成的json测试。。。反省)
yicao
6
求教,你用cmake怎么是用msvc生成json文件的啊,不用那个SourceTrail,我记得cmake不支持msvc生成json文件啊
tsing
8
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
用现代版本的CMake,会在构建目录中生成compile_commands.json文件。
tsing
12
This option is implemented only by Makefile Generators and the Ninja
. It is ignored on other generators.