利用makefile来生成cscope和tags

vim 写程序没有tags很麻烦, 如果你在一个新项目下,那更是麻烦。

本脚本, 利用 gcc 的 -MMD选项生成文件依赖, 这样可以利用工程的makefile来生成 cscope和tags。 真是太强了2.gif

gen_cscope_tag.sh  内容如下:

 
  
# !/bin/bash

target
= " $* "

is_gen_all
= 1 ;

CSCOPE_DIR
= .cscope
TAGS_DIR
= .tags
CFLAGS
+=- MMD make $target
export CFLAGS
function get_dep_files()
{
sed
- r - e 's / \s +/ \n / g' | sed - r - e ' / \\ $/ d; / .o: $/ d; / ^ $/ d'
}


function cscope_f()
{
cscope
- bk - i $1 -f $2
# rm $2.in
# rm $2.po
}


function ctags_f()
{
ctags
-- language - force = c ++ -- c ++- kinds =+ p -- fields =+ iaS -- extra =+ q - L $1 -f $2
}


function gen_total_index()
{
ctags_f cscope.files tags
cscope_f cscope.files cscope.out
}

function gen_every_index()
{
for files in $ (find . / - name ' * .d')
do
local name
=$ (sed - e 's / .d $// g' <<< $files )
cat
$files | sort | uniq | get_dep_files > ${name} .files
cscope_f
${name} .files $CSCOPE_DIR / ${name} .out
ctags_f
${name} .files $TAGS_DIR / ${name} .tags
rm
${name} .files
done
}


FILES
=$ (find . / - name ' * .d')
if [[ - z $FILES ]]
then
echo
" no .d file "
exit
0
fi

cat
$FILES | sort | uniq | get_dep_files > cscope.files



if [[ ! - d $CSCOPE_DIR ]]
then
mkdir
$CSCOPE_DIR
fi


if [[ ! - d $TAGS_DIR ]]
then
mkdir
$TAGS_DIR
fi


gen_total_index

if (( is_gen_all ))
then
gen_every_index
fi

到你工程目录,使用 gen_cscope_tag.sh clean all 就可以生成了。

.cscope 和 .tags 目录下有每个.cpp 文件的 索引。

修改 ~/.vimrc

 
  
function s:This_Cscope(file)
let file
= a:file
if strlen(file) == 0
let file
= s:Get_cur_file()
endif
let file
= simplify(file)
let dir
= simplify(s:Dirname(file))
let basename
= substitute(system( " sed -r -e 's/[.].+$//g' <<<$(basename " . file . " ) " ), " \n " , "" , "" )
let out_name
= dir . " /.cscope/ " . basename . " .out "
echo out_name
if (filereadable(out_name) && 0 == cscope_connection( 4 , out_name, file))
execute
" cscope add " . out_name . " " . dir
endif
endfunction

command
- nargs = ? - complete = file ThisCscope call < SID > This_Cscope( ' <args> ' )

转载于:https://www.cnblogs.com/napoleon_liu/archive/2011/05/06/2039316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值