转载:
在windows环境下使用emacs + cscope + ecb替代source insight source insight是windows环境下用于代码开发和阅读的利器,功能强大,对于大规模代码的维护和开发几乎不可或缺(这里指它提供的功能,类似的商业工具还有很多)。使用emacs替代source insight原因有:a,si是商业软件,使用需要付费,虽然可以从网上找到破解版本;b,对于unix/linux爱好者或者需要同时工作于unix和windows环境下的开发人员,emacs是通用工具;emacs其它的强大功能暂且不表。下面是基于windows xp平台的安装方法,其中大部分步骤和unix环境下的一样,只有cscope的有所不同。 1)准备工作首先,你得下载一下一些工具(扩展),emacs,cscope,ecb,cedet是必须的,session,doxymacs不是必要的,但是装上会更方便。下载这些东西的网址链接如下:(当然,下面这些东西都可以从google找到下载链接,下面提供的网址都是google出来的,如果下面提供的链接不可用了,大家可以自己google一把) i)emacs:http://www.gnu.org/software/emacs/ 从gnu的ftp网站上下载windows版本,最新的版本是emacs-22.1。下面的设置都是在这个版本上进行的。 ii)cscope:cscope的主页http://cscope.sourceforge.net/,其中有一个download的链接,从那里可以下载到编译好的压缩包。 win32版本的下载地址:http://iamphet.nm.ru/cscope/index.html,压缩包中有两个编译好的exe文件:cscope.exe, sort.exe iii)ecb:主页地址http://ecb.sourceforge.net/,download页面中还有一个Xemcas的安装程序setup.exe,可以试试,我没有使用这个。 sourceforg下载地址http://sourceforge.net/project/showfiles.php?group_id=17484 iv)cedet:主页http://cedet.sourceforge.net/,下载release压缩包1.0pre4.tar.gz,这个包中已经包含了semantic,ede,eieio, speedbar,因此下载了这个大包后不用分别下载这些扩展插件。 v)session:sf下载地址http://sourceforge.net/project/showfiles.php?group_id=46019 vi)doxymacs:地址http://doxymacs.sourceforge.net/,下载http://sourceforge.net/project/s ... p;release_id=514962 vii)下载windows下的bash工具,主要是用到其中的find工具,用来手工生成cscope.files。如果安装了cygwin则不用安装这个了。地址:http://folk.uio.no/andreass/unix_tools.html 2)安装安装emacs:这个很简单,只要将压缩包解开,放到你想放的位置就可以用了,如果要在windows的开始菜单中添加菜单项,点击bin目录下的addpm运行,就会在菜单中加入gnu菜单项。 安装cscope:a,解压平台不相关的那个tar.gz包,将/contrib/xscope/xscope.el拷贝到emacs-22.1/site-lisp目录下(emacs-22.1是你安装emacs的目录);b,解压win32版本的cscope,将cscope.ext sort.exe拷贝到emacs-22.1/bin目录下(这个路径不是必要的,因为 cscope在windows下要用起来还得费点劲,4)点会讲到) 安装ecb:解压,将解压后的ecb目录拷贝到site-lisp目录下。 安装cedet:解压,将解压后的cedet目录拷贝到site-lisp目录下。 安装session:解压,将解压后的session目录拷贝到site-lisp目录下。 安装doxymacs:解压,将解压后的doxymacs目录拷贝到site-lisp目录下。 安装win32bash:点击user.exe安装文件一步步点到最后就行了。到此安装工作完成。 3)配置.emacs启动文件显示指定扩展插件的加载地址(这一步好像不是必要的,只列出一个地址,其它类似) (add-to-list 'load-path "e:/emacs/site-lisp/ecb-2.31" 加载相应插件: (require 'xcscope) ;;加载xcscope (require 'cedet) ;;加载cedet (require 'ecb) ;;加载ecb (require 'session) ;;加载session (add-hook 'after-init-hook 'session-initialize) ;; 启动时初始化session (require 'doxymacs) ;; 启动doxymacs 在配置文件中加入这些语句后,保存重启emacs,重启后查看一下Message窗口中的加载信息,可以看到各个插件加载成功。在.emacs中加入一些方便的设置就可以使用了,完整的配置文件附在后面。(这些配置都是从google上到处搜刮来的,其中王垠博士的网页上有很多emacs设置的好东西可以参考,还有一些英文网站上贴出的配置文件中也有很多好东西,大家可以根据自己的习惯写自己的配置) 4)问题及解决安装进行到这里,大部分功能都没有问题了,存在的问题有: i)cscope的创建文件列表和创建代码符号索引两个命令不可用,按下C-c s L和C-c s I后minibuffer中显示cscope-indexer找不到。在 cscope的安装包中确实有一个cscope-indexer的文件,我们安装时没有将它拷贝到emacs的安装路径中去,但是即使将它拷贝到bin目录下也还是不能工作,用文本编辑器打开cscope-indexer会发现它其实是个shell脚本文件,从脚本中可以看到,它首先通过find,grep等工具生成一个cscope.files的文件,然后调用cscope使用cscope.files作为输入生成cscope.out的索引文件。因此,只要能生成一个文件列表的文件就可以使用win32版本的cscope.exe来生成cscope.out文件。到此,我们可以使用win32bash中的find 工具生成一个源代码文件列表了(与unix下一样:find /my-project-source -name "*.[chs]" -print > cscope.files,不知windows下是否有类似find这样功能的命令,xp下的find好像不能用通配符,如果有这样的东西就可以不安装win32bash)。生成了cscope.files源码文件列表后就可以使用它像si一样在代码间穿梭了: C-c s a设定代码根目录,cscope.files必须放在这个设定目录下,否则cscope找不到;在第一次使用如下几条命令时cscope会自动生成 cscope.out,也可以在windows的cmd中调用cscope.exe -b -i cscope.files -f cscope.out生成cscope.out。 C-c s g查找函数(或变量)定义; C-c s c查看调用者; C-c s C查看函数中调用的子函数; ii)semantic中设置的项目根目录好像不起作用,在进行tag查找时semantic只查了当前目录中的代码文件,如果引用的是其它目录中的函数或变量,查找相应定义时就找不到。这个问题还不知道原因,可能是设置的问题,semantic的设置项太多了。遇到相同问题的朋友请解答一下。 到此,si中常用的几个动作实现了。 还有个si中类似功能的实现:跳到函数定义后如何在跳回刚才的调用函数的地方。在王垠的网页中找到了一个实现 ;;;临时记号 (global-set-key [(control ?\.)] 'ska-point-to-register) (global-set-key [(control ?\,)] 'ska-jump-to-register) (defun ska-point-to-register() "Store cursorposition _fast_ in a register. Use ska-jump-to-register to jump back to the stored position." (interactive) (setq zmacs-region-stays t) (point-to-register ) (defun ska-jump-to-register() "Switches between current cursorposition and position that was stored with ska-point-to-register." (interactive) (setq zmacs-region-stays t) (let ((tmp (point-marker))) (jump-to-register (set-register 8 tmp))) 这样就可以在函数间跳来跳去,结合cscope的pop-mark,就可以跳来跳去了,这样基本可以满足大多数情况下的使用。还有一些有用扩展:http://docs.huihoo.com/homepage/shredderyin/emacs_elisp.html ecb,cedet(semantic)提供了很多功能,不过由于太多了,需要慢慢摸索,目前使用cscope已经基本上实现了si上的几个常用功能, ecb + semantic可以实现像si中的函数/变量上下文显示功能,但是由于4)ii)中提到的问题,这个显示上下文功能有时候不起作用。