我使用cquery进行代码导航,使用bear make生成compile_commands.json。但是在实际操作中,make是成功的,同时也生成了compile_commands.json文件,但是这里面有些源码的信息却没有,导致不能进行与这些源文件相关的代码导航。请问有人有类似的经验吗?还是这种时候就改global登场了?
bear make
会应用你当前环境下的编译条件,例如以下代码,当编译条件是 DARWIN 时,LINUX 分支的代码就没有被索引了:
#ifdef LINUX
char *platform = "Linux";
#else
#ifdef DARWIN
char *platform = "Darwin";
#endif
#endif
这个效果必须是 libclang 5.0.1 以上 (5.0.0 以下则是整块 #if
代码都没有索引),更多讨论:幫忙改進 C++ LSP 體驗 - #58,来自 twlz0ne
不知道你说的是不是这个问题。请补充完整你的问题,附上操作步骤、代码片段、截图。
另外使用bear make
前注意make clean
防止有些targets已經構建了,compile_commands.json缺乏相應信息
我之前用這個命令生成compile_commands.json
wget 'https://git.archlinux.org/svntogit/packages.git/plain/trunk/config?h=packages/linux' -O .config
yes '' | make config
bear make -j bzImage modules
如果不同#if
#ifdef
分支都想索引,cquery是解決不了的(一個源文件只存一個版本,即使用多個translation units用不同方式編譯它),某些C++ IDE可以處理。對於Linux kernel這種重度依賴macro的,還要結合ggtags
多谢各位帮助, 由于平时对linux内核的源码不熟悉, 目前在编译的环节上就出了问题… 后面的工作进行不下去了… 在找同事帮助中…