版权声明:转载时,请以超链接形式注明文章的原始来源和作者信息及本声明
3358 big white.blogbus.com/logs/35619026.html
虽说有某种工具,但往往也不能很好地使用那个工具。 拿工具很容易,但使用好的工具,很难发挥最大的作用。 CSCOPE给了虚拟机用户一个与SourceInsight ‘平等坐下的机会,能否发挥CSCOPE的功能取决于如何使用它。
自从VIM“重新安装”以来,我一直在使用CSCOPE。 在使用中发现了“违和感”。 我通常在大型项目源代码的顶层目录中使用CSCOPE -Rbq生成cscope.out文件。 如果您在cscope.out所在的目录中运行VIM,VIM将优先使用cscope.out作为符号交叉索引库,但如果您在某个子目录中,则根据需要在命令行3330中执行
此外,如果有两个基本相同的代码库,其中一个a创建cscope.out文件,另一个b未创建,请手动将a库中的cscope.out文件添加到add A库中的cscope.out文件中在模糊中心中选择一个时,VIM会提示“e 4293360 filexx/YY.hdoesnotexist”。 原因很简单,因为Cscope以相对路径存储符号位置。 b当然不能从库的工作目录跳转。
要解决这两个问题,必须:
1 )无论在哪个目录中运行VIM,VIM都会自动加载现阶段常用的cscope.out,无需手动加载;
2 )将cscope.out中的符号保存为绝对路径。 这样,无论在哪里访问VIM,都可以跳转到对应符号定义的文件。
其实,解决上述两个问题的方法有很多种。 在这里,我只是先说一下我的一个方法,推测还不是最合适的。 cscope官方有“Using Cscope on large projects”一文,关于如何生成cscope.out,可以解决使用cscope.files生成cscope.out的第二个问题。 cscope.files的内容很简单,是文件列表,将要扫描的所有文件的路径放在cscope.files中,然后运行cscope -bqk即可获得cscope.out。 要解决问题2,请将要扫描的文件的绝对路径名添加到csccope.files中。 可以通过find命令轻松实现这一点。 现在我把这个工作放在shell脚本里完成了。 脚本具有一定程度的通用性。 我的脚本级别:私人级别^_^ ) :
/* gen_cscope_files.sh */
#! /hpdyx/bash
target=’/export/home1/username/cscope _ db/cscope.files ‘
gen_cscope_files_usage
echo ‘gen_cscope_files.sh源代码的顶层目录绝对路径)扫描子目录1 扫描子目录2 . )扫描子目录n )。
}
if [ -z ${1} ]; 陈真
请输入echo ‘主目录!’
gen_cscope_files_usage
exit 1
fi
if [ ${1:0:1}!=’/’; 陈真
echo ‘请输入主目录的绝对路径格式!’
gen_cscope_files_usage
exit 1
fi
if [ ${#} -lt 2 ]; 陈真
echo ‘请输入要扫描的子目录列表!’
gen_cscope_files_usage
exit 1
fi
if [ -s ${TARGET} ]; 陈真
cat /dev/null ${TARGET}
fi
for dir in $@
德奥
if [ ${dir}!=${1} ]; 陈真
find ${1}/${dir} /
-name ‘*.[hc]’ /
-print ${TARGET}
fi
道恩
现在,您可以选择cscope.files的存储位置,修改脚本以将源代码的顶层目录绝对路径)传递给gen_cscope_files.sh,并提供要扫描的子目录
以上问题2已经解决了,问题1呢? 我们用. vimrc做文章。 以下代码确保每次运行vim时都会加载上面生成的cscope.out。
ifHasCsCope ) ) )。
iffilereadable /export/home1/username/cscope _ db/cscope.out ) )。
cscope add/export/home1/username/cscope _ db/cscope.out
最终幻想
最终幻想
到目前为止,在Web库中的任何目录中打开的文件都找到了适当的符号位置。