我发明了一种快速又友好的解决方案.
该解决方案适用于Linux/OSX/Cygwin (应该也适用于Windows环境,但我不在Windows下作开发所以不确定).
只有很少量的配置. 你只需要安装 GNU Global
以及另外两个Emacs插件:
- company ,用于代码补全
- emacs-helm-gtags 或 emacs-counsel-gtags 用于代码导航. 我个人用的是
emacs-counsel-gtags
.
下面是步骤说明.
假设我有两个目录 ~/proj1
以及 ~/proj2
. 两个项目都会用到第三方库的C++头文件,这些头文件放在只读目录 /usr/include
中.
新建一个 ~/obj
目录来存放第三方库的索引文件.
mkdir -p ~/{proj1,proj2,obj}
~/proj2/lib.cpp
的内容为:
void proj2_hello(int a2, char* b2) {
}
~/proj1/main.cpp
的内容为:
void proj1_hello(int a1, char* b1) {
}
int main(int argc, char *argv[]) {
return 0;
}
在shell中运行下列代码来扫描代码Run below command in shell to scan code,
cd /usr/include && MAKEOBJDIRPREFIX=~/obj gtags -O && cd ~/proj1 && gtags && cd ~/proj2 && gtags
设置好相应的Emacs插件后(最简单的方法只需要把这些插件安装好就行了), 将下列代码插入到 ~/.emacs
中,
;; Please note `file-truename' must be used!
(setenv "GTAGSLIBPATH" (concat "/usr/include"
":"
(file-truename "~/proj2")
":"
(file-truename "~/proj1")))
(setenv "MAKEOBJDIRPREFIX" (file-truename "~/obj/"))
(setq company-backends '((company-dabbrev-code company-gtags)))
就像平常那样使用Emacs就行了.
不过有一点要逐一,你需要安装8月25日之后编译的company,因为我昨天才修复了一个company的issue.
通过查阅 GNU Global manual 来搞清楚环境变量 GTAGSLIBPATH
和 MAKEOBJDIRPREFIX
的意思.