在 Emacs 里面使用 Cscope

转载自:https://www.cnblogs.com/linuxkid/articles/2924698.html


Contents

简介
安装和配置
使用简介

简介

对于浏览源代码来说,在 Emacs 里面也有很多工具可用,比如自带的 etags 就 不错,不过功能不如 Cscope 强大。 Cscope 并不像 etags 那样属于 Emacs , 它是一个独立的程序。它是一个具有完全 Unix 血统的程序,用于帮助开发人员 浏览源代码。它最初(那还是 PDP-11 的时代)是由 Bell 实验室开发,并且多年 以来一直是 AT&T Unix 商业发行版的一部分。它已经被用于管理超过两千万行代 码的工程。在2000年4月,多亏了 Santa Cruz Operation, Inc. (SCO) , Cscope 的源代码在 BSD license 下开放了源代码。

Cscope 的发行包里面有个 xcscope.el 能很好地用于 (X)Emacs 。它处于源代 码包的 contrib/xcscope 目录下。该目录下面还有一个名为 cscope-indexer 的脚本文件,用于处理源代码并不是在一个文件夹下面的情况。

安装和配置

首先到 Cscope 的主页 上去下载最新的源代码包,编译安装。要在 Emacs 里面 使用,首先必须把 xcscope.el 拷贝到 load-path 里面包含的目录里面。并在 ~/.emacs 里面加上 (require 'xcscope) 就可以了,或者,如果你希望在打开 c 或者 c++ 文件的时候才加载 xcsope ,可以写:

(add-hook 'c-mode-common-hook
	  '(lambda ()
	    (require 'xcscope)))

如果源代码全部处于同一个目录下面,现在就可以使用了。否则,如果源代码有 多层目录,或者其他地方还有附加的源代码,则需要 cscope-indexer 脚本。把 那个脚本拷贝到系统 PATH 里面去(如/usr/bin/)。如果所有的源代码以及子目 录都是在同一个目录下面的,只要执行 C-c s I(cscope-index-files) 就可以 生成 Cscope 的数据库,接下来就可以使用了。

 要使用cscope的强大功能,首先需要为我们的代码生成一个cscope数据库。生成数据库很简单,在我们的项目根目录运行下面的运行
     cscope -Rbkq
   会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。
   参数意义如下:
    -R: 在生成索引文件时,搜索子目录树中的代码
    -b: 只生成索引文件,不进入cscope的界面
    -k: 在生成索引文件时,不搜索/usr/include目录
    -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
    -i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
    -I dir: 在-I选项指出的目录中查找头文件
    -u: 扫描所有文件,重新生成交叉索引文件
    -C: 在搜索时忽略大小写
    -P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了
    Cscope只在第一次解析时扫描全部文件,以后再调用cscope,它只扫描那些改动过的文件,这大大提高了cscope生成索引的速度。 
    在缺省情况下,cscope在生成数据库后就会进入它自己的查询界面,我们一般不用这个界面,所以使用了“-b”选项。如果你已经进入了这个界面,按CTRL-D退出。

    Cscope在生成数据库中,在你的项目目录中未找到的头文件,会自动到/usr/include目录中查找。如果你想阻止它这样做,使用“-k”选项。

    Cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y),虽然它也可以支持C++以及Java,但它在扫描目录时会跳过C++及Java后缀的文件。如果你希望cscope解析C++或Java文件,需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。
    find . -name "*.h" -o -name "*.c" -o -name "*.cc"  -o -name "*.cpp" -o -name "*.hpp" > cscope.files

cscope -bkq -i cscope.files

使用简介

默认是的快捷键都是绑定到 C-c s 的前缀上面,如果嫌麻烦的话可以自己更改 快捷键绑定。这是默认的用于查找的键绑定:

C-c s s         Find symbol.
C-c s d         Find global definition.
C-c s g         Find global definition (alternate binding).
C-c s G         Find global definition without prompting.
C-c s c         Find functions calling a function.
C-c s C         Find called functions (list functions called
                from a function).
C-c s t         Find text string.
C-c s e         Find egrep pattern.
C-c s f         Find a file.
C-c s i         Find files #including a file.

下面是在搜索到的结果之间切换用的快捷键:

C-c s b         Display *cscope* buffer.
C-c s B         Auto display *cscope* buffer toggle.
C-c s n         Next symbol.
C-c s N         Next file.
C-c s p         Previous symbol.
C-c s P         Previous file.
C-c s u         Pop mark.

更详细的使用说明请参见 xcscope.el 文件头部的注释。

猜你喜欢

转载自blog.csdn.net/Anton8801/article/details/80089219
今日推荐