需求
代码自动补全需要 tags.
解决
生成 tags
tags 生成工具
使用 gtags
生成 tags, 如果没有 gtags=,需要安装 =global
.
sudo apt install global
生成 tags
# dump index files to directory ~/obj if 3rd party library directory is read only
cd /usr/include && MAKEOBJDIRPREFIX=~/obj gtags --objdir
cd /usr/src/linux/include && MAKEOBJDIRPREFIX=~/obj gtags --objdir
# # above two command lines are same as below two command lines
# mkdir -p ~/obj/usr/include && cd /usr/include && gtags --objdir=~/obj/usr/include
# mkdir -p ~/obj/usr/linux/include && cd /usr/linux/include && gtags --objdir=~/obj/usr/linux/include
...
# index files are placed inside the projects
cd ~/proj1 && gtags
cd ~/proj2 && gtags
...
emacs 配置
在 el
或 org
配置文件中增加:
;; `file-truename' MUST be used!
(setenv "GTAGSLIBPATH" (concat "/usr/include"
":"
"/usr/src/linux/include"
":"
(file-truename "~/proj2")
":"
(file-truename "~/proj1")))
(setenv "MAKEOBJDIRPREFIX" (file-truename "~/obj/"))
(setq company-backends '((company-dabbrev-code company-gtags)))
打开 cpp
文件后,需要 M-x
开启 company-mode
, 但是有些能补全,有些不能补全,具体原因还在寻找。多个可选时,使用 M-n
, M-p
来进行选择。