补充说明
cscope 面向 C/C++ 源码,建立符号数据库后可以交互式查找:谁调用了该函数、函数定义在哪、哪些文件包含某个字符串、变量的所有引用等。Vim 可通过 :cscope 集成它,适合阅读大型 C 项目。
使用前需在源码根目录生成 cscope.out 索引:cscope -Rbq。-R 递归子目录,-b 只建库不进入界面,-q 生成倒排索引加速查询。之后运行 cscope -d 使用已有数据库。默认生成 cscope.out,可用 -f 指定文件名。
注意大项目建库耗时且索引文件较大;增删源文件后需重新生成。它只解析 C 家族语言,其他语言应改用 ctags、GNU Global 等工具。Debian 需安装 cscope 包,RHEL 通常在 EPEL 中提供。
交互界面中用方向键或数字选择查询类型,输入符号后列出匹配位置,再选择编号跳转。也可以让 Vim 直接调用 cscope,避免反复切换终端。
语法
cscope [-bqR] [-f 数据库] [-s 目录] [源文件 ...]
选项
-b:只构建交叉引用数据库,不启动界面;-q:生成倒排索引,加快查询;-R:递归搜索子目录;-f 文件:指定数据库文件名(默认cscope.out);-d:不重建数据库,直接使用已有数据库;-s 目录:在指定目录中查找源文件;-I 目录:添加头文件搜索目录;-u:无条件重建所有索引;-k:建库时不搜索/usr/include。
实例
# 为当前项目递归建立索引(含倒排索引)
cscope -Rbq
# 使用已有数据库进入交互界面
cscope -d
# 指定数据库文件并只索引 src 目录
cscope -b -f my.out -s src
# 在 Vim 中:先 :cs add cscope.out,再 :cs find g main