1.首先,在系统中安装Cscope。Linux下,安装软件的方式通常有两种:
方式一:下载Cscope的源代码,按照源码包中的INSTALL说明文件,执行下面的命令进行配置编译安装
./configure make make install |
Cscope的源码包里面有个xcscope.el文件,为(X)Emacs提供了Cscope 接口。它处于源码包的 contrib/xcscope 目录下。该目录下面还有一个名为cscope-indexer的脚本文件,用于创建文件列表和数据库。
方式二:利用linux发行版的软件管理工具进行安装。我使用的是Jaunty Jackalope(Ubuntu 9.04),只要一条命令,解决所有问题。
sudo apt-get install cscope |
安装后,cscope-indexer脚本位于/usr/bin目录下,xcscope.el被置于emacs默认的load-path下,在我的系统中是/usr/share/emacs/site-lisp。
2.为了能够执行cscope-indexer脚本,需要将它放到PATH变量指向的文件夹下,如/usr/bin,并确认该脚本具有执行权限。
3.把xcscope.el文件放到系统用户的load-path下。为系统用户创建文件夹并将其加入load-path的方法是:先创建文件夹,
mkdir -p ~/.emacs.d/site-lisp/ |
然后,在emacs的配置文件~/.emacs中添加
;;LOAD_PATH (add-to-list 'load-path' "~/.emacs.d/site-lisp") |
如果没有该文件,请手动创建。
4.在.emacs文件中加入下面的语句
(require 'xcscope) |
或者,你希望只在打开c/c++文件的时候才加载xcscope,可以加入
(add-hook 'c-mode-common-hook '(lambda() (require 'xcscope))) |
cscopes基本使用说明
这里以内核源码为例,介绍Cscope的基本用法。
1.首先,在源码根目录下,如~/kernerl/linux-2.6.29.3,利用cscope-indexer脚本生成文件列表和数据库,方法是执行
cscope-indexer -r |
-r参数表示递归检索子目录,文件列表和数据库的默认文件名分别为cscope.files和cscope.out,可以使用-i,-f参数进行修改,请参考man了解脚本参数用法。
2.激动人心的时刻到了。用emacs打开init/main.c,C-s搜索sched_init函数,将光标停在函数名上,按C-c s d或者先前设置的Ctrl+F6,回车进行查找。结果居然用了35.32秒,汗!原来,Cscope默认在每次进行查找时更新cscope.out。当工程十分庞大时,建议关闭该选项以提高查找速度。方法是在~/.emacs文件中加入
(setq cscope-do-not-update-database t) |
重复上述操作,结果仍然用了9.89秒,再汗!莫非是我的古董本太慢?
3.百度一下,你就知道:) Cscope可以通过创建反向索引加速查找,方法是调用Cscope时,使用-q参数。真的假的,一试便知。修改cscope-indexer脚本,将
cscope -b -i $LIST_FILE -f $DATABASE_FILE |
替换为
cscope -q -b -i $LIST_FILE -f $DATABASE_FILE |
进入内核根目录,删除先前的文件列表和数据库,重新调用cscope-indexer。这回多生成了两个文件,cscope.in.out和cscope.po.out。重试刚才的查找,结果只用了0.08秒,大功告成。
二、使用emacs + cscope + ecb替代source insight