注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小可尼の博客

Linux后端的技术窝窝

 
 
 

日志

 
 

cscope的使用  

2013-10-25 14:26:48|  分类: vim+ctags |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
出处:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73260878e482a958448e435061e5a2dbefb7e35107289823d211cfc090db0ab72252a0322b49bd58a49c0b894352f8927347716875612a443e9941831847dd00ce6f344f0ba8163d2ff8f91884353bb025826dca7da1c5b4996&p=c2769a479f8002ff57ee9578505c82&newp=882a9644d08717dd0be296261641c4231610db2151d0da1f3b82e1&user=baidu&fm=sc&query=no+cscope+connection&qid=&p1=1

cscope的使用

首先自然是安装vim跟cscope

如果项目比较简单, 那就直接cscope -R, 会在当前目录下生成一个数据库文件cscope.out

这个时候用vim编辑项目中的任意一个源文件, :cs show  可能会显示 “no cscope connection"

这是因为vim没有帮你自动加载数据库文件, 用:cs add cscope.out就可以了

这个时候命令:cs find s tagname就可以用了, 但用ctrl + ]的时候不会自动跳转, 这还是因为vim没有把你的cscope数据库文件当成tag文件, 需要用: set cst 或者:set cscopetag, 这样就会把cscope的数据库当成tag文件了

把下面代码放到.vimrc文件中, 以后系统就会自动帮你做了

 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
set csprg=/usr/bin/cscope
set csto=1
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>



如果有大型的项目, cscope -R不但会消耗大量的时间, 而且还会干扰tags,所以一般会现生成一个列表

 
 LNX=/home/jru/linux-2.4.18
cd /
find $LNX \
-path "$LNX/arch/*" ! -path "$LNX/arch/i386*" -prune -o \
-path "$LNX/include/asm-*" ! -path "$LNX/include/asm-i386*" -prune -o \
-path "$LNX/tmp*" -prune -o \
-path "$LNX/Documentation*" -prune -o \
-path "$LNX/scripts*" -prune -o \
-path "$LNX/drivers*" -prune -o \
-name "*.[chxsS]" -print >/home/jru/cscope/cscope.files


然后使用这个列表生成一个cscope.out的数据库文件,(上面加了绝对路径,使得数据库文件可以放在任意地方)


 cd  /home/jru/cscope
  cscope -bkq -i cscope.files


这样就会生成一个数据库文件了
cscope的一些参数的意义如下

 
  • -R: 在生成索引文件时,搜索子目录树中的代码
  • -b: 只生成索引文件,不进入cscope的界面
  • -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
  • -k: 在生成索引文件时,不搜索/usr/include目录
  • -i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”-“,表示由标准输入获得文件列表。
  • -Idir: 在-I选项指出的目录中查找头文件
  • -u: 扫描所有文件,重新生成交叉索引文件
  • -C: 在搜索时忽略大小写
  • -Ppath: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。



cscope的一些命令如下

 
  • s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
  • g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
  • d: 查找本函数调用的函数
  • c: 查找调用本函数的函数
  • t: 查找指定的字符串
  • e: 查找egrep模式,相当于egrep功能,但查找速度快多了
  • f: 查找并打开文件,类似vim的find功能
  • i: 查找包含本文件的文件


可以在.vimrc设置一个自动更新的快捷键

 nmap <F5> :!find . -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' > cscope.files<CR> 
                        \ :!cscope -b -i cscope.files -f cscope.out<CR> 
                        \ :cs reset<CR>
  评论这张
 
阅读(307)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018