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>
set tag=tag;
set autochdir



如果有大型的項目, 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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM