参考https://blog.csdn.net/SCHOLAR_II/article/details/8263490
1.首先到
http://cscope.sourceforge.net
下载cscope
2.安装:
tar -zxf cscope-xx.x.tar.gz
cd cscope-xx.x
./configure
make
make install
然后把contib/xcscope/目录下的cscope-indexer复制到PATH目录比如/usr/local/bin
安装可能遇到问题:
fatal error: curses.h: 没有那个文件或目录
解决:
sudo apt install libncurses5-dev libncursesw5-dev
3.配置
接着whereis emacs 看下emacs安装在哪里,
把cscope-xx.x目录下的 contrib/xcscope/xcscope.el文件拷贝到/usr/share/emacs/site-lisp/目录下面.
cp contrib/xcscope/xcscope.el /usr/share/emacs/site-lisp/
在.emacs文件中添加
(require 'cc-mode)
(load-file "/usr/share/emacs/site-lisp/xcscope.el")
(require 'xcscope)
4 生成索引文件
Cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y),虽然它也可以支持C++以及Java,但它在扫描目录时会跳过
C++及Java后缀的文件。如果你希望cscope解析C++或Java文件,需要把这些文件的名字和路径保存在一个名为cscope.files的文
件。当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。
1. find . -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cpp" -o -name "*.hpp" > cscope.files
2. cscope -bkq -i cscope.files
重新生成时,有可能增加了新文件,要重新执行上述的两步
参数意义如下:
-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,这样,你不用切换到你数据库文件所在的目录也可以使用它了
干脆写个脚本以后方便用
#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
5 在代码中穿梭
查找函数或者变量 c-c s s
查找函数或变量的定义 c-c s g
查找函数在哪里被调用了,c-c s c
查找该函数调用了哪些函数 c-c s C
查找到的函数上次出现的位置 c-c s p
查找到的函数下次出现的位置 c-c s n