<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>易水博客 &#187; cscope</title>
	<atom:link href="http://easwy.com/blog/archives/tag/cscope/feed/" rel="self" type="application/rss+xml" />
	<link>http://easwy.com/blog</link>
	<description>关注Linux, Scala, Android, Java, 开源软件和嵌入式系统</description>
	<lastBuildDate>Mon, 12 Mar 2012 02:03:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>如何将cscope安装到指定目录</title>
		<link>http://easwy.com/blog/archives/install-cscope-to-home/</link>
		<comments>http://easwy.com/blog/archives/install-cscope-to-home/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 13:33:00 +0000</pubDate>
		<dc:creator>Easwy</dc:creator>
				<category><![CDATA[开发编程]]></category>
		<category><![CDATA[开源软件]]></category>
		<category><![CDATA[文本处理]]></category>
		<category><![CDATA[cscope]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://easwy.com/blog/?p=852</guid>
		<description><![CDATA[登录博客，看到joecgs问：能不能通过和安装vim一样的方式来安装cscope(到个人的HOME目录)。
随着Linux的普及，使用Linux进行软件开发的人也越来越多。而大多数公司都提供一台高性能的中央服务器做为开发编译服务器，每个人登录这台服务器进行开发编译。在这种情况下，用户通常没有root权限，怎么安装应用程序呢？  <a href="http://easwy.com/blog/archives/install-cscope-to-home/">Continue reading <span class="meta-nav">&#8594;</span></a><div class="fixed"></div><div id="related_posts"><h3  class="related_post_title">相关文章</h3><ul class="related_post">
<li><a href='http://easwy.com/blog/archives/advanced-vim-skills-cscope/' rel='bookmark' title='vi/vim使用进阶: 程序员的利器 &#8211; cscope'>vi/vim使用进阶: 程序员的利器 &#8211; cscope</a></li>
<li><a href='http://easwy.com/blog/archives/compile-vim73-on-ubuntu/' rel='bookmark' title='在Ubuntu上编译vim 7.3'>在Ubuntu上编译vim 7.3</a></li>
<li><a href='http://easwy.com/blog/archives/cscope_sort_option_on_windows/' rel='bookmark' title='Windows下cscope -q选项出错的解决'>Windows下cscope -q选项出错的解决</a></li>
</div><div class="fixed"></div>]]></description>
			<content:encoded><![CDATA[<p>
    登录博客，看到<a class="ulink" href="http://easwy.com/blog/archives/advanced-vim-skills-cscope/#comment-313" target="_top">joecgs问</a>：
  </p>
<div class="blockquote">
<blockquote class="blockquote">
    easwy:您好，感谢您的这一系列的文章，帮助我很快地熟悉使用vim，谢谢。<br />
    我现在是用远程的shell来写程序，服务器没有安装cscope，而又不能获取root权限。所以，我想能不能通过和安装vim一样的方式来安装cscope？
  </p></blockquote>
</div>
<p>
    随着Linux的普及，使用Linux进行软件开发的人也越来越多。而大多数公司都采用这种方式：提供一台高性能的中央服务器做为开发编译服务器，每个人登录这台服务器进行开发编译。在这种情况下，用户通常没有root权限，怎么安装应用程序呢？
  </p>
<p>
    其实，Linux作为老牌多用户操作系统UNIX的一个分支，这当然不是一个问题。多用户操作系统中，允许用户根据自己的喜好安装软件，是再自然不过的事情了。
  </p>
<p>    做法也很简单，UNIX的程序，一般都使用autoconf来自动检测安装环境完成配置，然后再进行编译、安装，这三步就是俗称的三板斧。
  </p>
<p>
    在使用autoconf进行配置时，可以使用参数来更改缺省的配置，比如，通过使用<span class="command"><strong>&#8211;prefix</strong></span>参数，就可以改变程序的安装目录，还有一些其它参数，允许用户打开或关闭某些特性。每个程序所支持的参数不一定相同，可以通过<span class="command"><strong>./configure &#8211;help</strong></span>命令查看程序支持哪些参数。
  </p>
<p>
    回到joecgs的问题上来，如果想把cscope安装到自己的HOME目录下，其实只需要在configure时，指定<span class="command"><strong>&#8211;prefix=$HOME</strong></span>就可以了，全部命令如下：
  </p>
<pre class="programlisting">
cd cscope-15.7
./configure --prefix=$HOME
make
make install </pre>
<p>    如果你留心一下，我们在<a class="ulink" href="http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-vimgdb/" target="_top">编译vim</a>时，也可以指定<span class="command"><strong>&#8211;prefix</strong></span>参数。其实，对绝大多数支持autoconf的程序来说，都可以用这一参数来指定你程序的安装位置，不信你试试!
  </p>
<div class="posturl">
<p><span class="bold"><strong>原创文章，请阅读页脚的<a href="#license">许可方式</a>，转载请注明：</strong></span>转载自<a class="link" href="http://easwy.com/blog/" target="_top">易水博客</a> [ <a class="link" href="http://easwy.com/blog/" target="_top">http://easwy.com/blog/</a> ]</p>
<p><span class="bold"><strong>本文链接地址:</strong></span> <a class="link" href="http://easwy.com/blog/archives/install-cscope-to-home/" target="_top">http://easwy.com/blog/archives/install-cscope-to-home/</a></p>
</div>
<p style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">文章的脚注信息由WordPress的<a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl插件</a>自动生成</p>
<div class="fixed"></div><div id="related_posts"><h3  class="related_post_title">相关文章</h3><ul class="related_post">
<li><a href='http://easwy.com/blog/archives/advanced-vim-skills-cscope/' rel='bookmark' title='vi/vim使用进阶: 程序员的利器 &#8211; cscope'>vi/vim使用进阶: 程序员的利器 &#8211; cscope</a></li>
<li><a href='http://easwy.com/blog/archives/compile-vim73-on-ubuntu/' rel='bookmark' title='在Ubuntu上编译vim 7.3'>在Ubuntu上编译vim 7.3</a></li>
<li><a href='http://easwy.com/blog/archives/cscope_sort_option_on_windows/' rel='bookmark' title='Windows下cscope -q选项出错的解决'>Windows下cscope -q选项出错的解决</a></li>
</div><div class="fixed"></div>]]></content:encoded>
			<wfw:commentRss>http://easwy.com/blog/archives/install-cscope-to-home/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>vi/vim使用进阶: 程序员的利器 &#8211; cscope</title>
		<link>http://easwy.com/blog/archives/advanced-vim-skills-cscope/</link>
		<comments>http://easwy.com/blog/archives/advanced-vim-skills-cscope/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 07:36:27 +0000</pubDate>
		<dc:creator>Easwy</dc:creator>
				<category><![CDATA[开源软件]]></category>
		<category><![CDATA[文本处理]]></category>
		<category><![CDATA[cscope]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://easwy.com/blog/?p=162</guid>
		<description><![CDATA[本系列文章主要介绍vim的使用技巧、vimrc的配置、vim的命令和vim的插件等。
在前面的文章中介绍了利用ctags生成的tag文件，跳转到标签定义的地方。但如果想查找函数在哪里被调用，或者标签在哪些地方出现过，ctags就无能为力了，这时需要使用更为强大的cscope。本文就介绍如何使用cscope，有了它，你可以把source insight抛到一边去了。 <a href="http://easwy.com/blog/archives/advanced-vim-skills-cscope/">Continue reading <span class="meta-nav">&#8594;</span></a><div class="fixed"></div><div id="related_posts"><h3  class="related_post_title">相关文章</h3><ul class="related_post">
<li><a href='http://easwy.com/blog/archives/vim-cscope-ctags/' rel='bookmark' title='vi/Vim + Cscope/Ctags'>vi/Vim + Cscope/Ctags</a></li>
<li><a href='http://easwy.com/blog/archives/advanced-vim-skills-quickfix-mode/' rel='bookmark' title='vi/vim使用进阶: 剑不离手 &#8211; quickfix'>vi/vim使用进阶: 剑不离手 &#8211; quickfix</a></li>
<li><a href='http://easwy.com/blog/archives/advanced-vim-skills-netrw-bufexplorer-winmanager-plugin/' rel='bookmark' title='vi/vim使用进阶: 文件浏览和缓冲区浏览'>vi/vim使用进阶: 文件浏览和缓冲区浏览</a></li>
</div><div class="fixed"></div>]]></description>
			<content:encoded><![CDATA[<p>
    <span class="bold"><strong>&lt;&lt; </strong></span><a class="link" href="http://easwy.com/blog/archives/advanced-vim-skills-catalog/" target="_top">返回vim使用进阶: 目录</a>
</p>
<p>
    本节所用命令的帮助入口：
  </p>
<pre class="programlisting">
:help cscope </pre>
<p>
    在前面的文章中介绍了<a class="link" href="http://easwy.com/blog/archives/advanced-vim-skills-use-ctags-tag-file/" target="_blank">利用tag文件</a>，跳转到标签定义的地方。但如果想查找函数在哪里被调用，或者标签在哪些地方出现过，ctags就无能为力了，这时需要使用更为强大的cscope。
  </p>
<p>
    Cscope具有纯正的Unix血统，它最早是由贝尔实验室为PDP-11计算机开发的，后来成为商用的AT&amp;T Unix发行版的组成部分。直到2000年4月，这个工具才由SCO公司以BSD license开源发行。
  </p>
<p>
    Cscope的主页在<a class="link" href="http://cscope.sourceforge.net/" target="_blank">http://cscope.sourceforge.net/</a>，如果你的计算机上没有cscope，你可以在此处下载它，在写本文时，它的最新版本是15.6。安装它非常简单，你只需要在cscope的源代码目录中执行下面三条命令：
  </p>
<pre class="programlisting">
./configure
make
make install </pre>
<p>
    在windows上也可以使用cscope，在cscope的主页上可以下载到由DJGPP编译器编译的cscope for windows，不过这个版本不能和vi一起工作。或者你可以下载cygwin工具包(<a class="link" href="http://www.cygwin.com/" target="_blank">http://www.cygwin.com/</a>)，这个工具包中也包含了cscope。
  </p>
<p>
    在<a class="link" href="http://iamphet.nm.ru/cscope/" target="_blank">http://iamphet.nm.ru/cscope/</a>有Sergey Khorev预编译的一个Win32版本的cscope，这个版本的cscope可以很好的与windows版本的vim搭配使用。
  </p>
<p>
    cscope的用法很简单，首先需要为你的代码生成一个cscope数据库。在你的项目根目录运行下面的命令：
  </p>
<pre class="programlisting">
cscope -Rbq </pre>
<p>
    这些选项的含义见后面。这个命令会生成三个文件：cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符号索引，后两个文件是使用”<span class="emphasis"><em>-q</em></span>“选项生成的，可以加快cscope的索引速度。在windows上使用cscope时，你可能会遇到-q选项被忽略的提示，解决办法请看这篇文章：<a href="http://easwy.com/blog/archives/cscope_sort_option_on_windows/">Windows下cscope -q选项出错的解决</a>。
  </p>
<p>
    在缺省情况下，cscope在生成数据库后就会进入它自己的查询界面，我们一般不用这个界面，所以使用了”<span class="emphasis"><em>-b</em></span>“选项。如果你已经进入了这个界面，按<span class="command"><strong>CTRL-D</strong></span>退出。
  </p>
<p>
    Cscope在生成数据库中，在你的项目目录中未找到的头文件，会自动到/usr/include目录中查找。如果你想阻止它这样做，使用”<span class="emphasis"><em>-k</em></span>“选项。
  </p>
<p>
    Cscope缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y)，虽然它也可以支持C++以及Java，但它在扫描目录时会跳过C++及Java后缀的文件。如果你希望cscope解析C++或Java文件，需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当cscope发现在当前目录中存在cscope.files时，就会为cscope.files中列出的所有文件生成索引数据库。通常我们使用<span class="command"><strong>find</strong></span>来生成cscope.files文件，仍以vim 7.0的源代码为例：
  </p>
<pre class="programlisting">
cd ~/src/vim70
find . –type f &gt; cscope.files
cscope -bq </pre>
<p>
    这条命令把~src/vim70目录下的所有普通文件都加入了cscope.files，这样，cscope会解析该目录下的每一个文件。上面的cscope命令并没有使用”<span class="emphasis"><em>-R</em></span>“参数递归查找子目录，因为在cscope.files中已经包含了子目录中的文件。
  </p>
<p>
    注意：<span class="command"><strong>find</strong></span>命令输出的文件以相对路径表示，所以cscope.out的索引也相对于当前路径。如果你要在其它路径中使用当前的cscope.out，需要使用下面介绍的<span class="emphasis"><em>-P</em></span>选项。
  </p>
<p>
    Cscope只在第一次解析时扫描全部文件，以后再调用cscope，它只扫描那些改动过的文件，这大大提高了cscope生成索引的速度。
  </p>
<p>
    下表中列出了cscope的常用选项：
  </p>
<div class="itemizedlist">
<ul type="disc">
<li><span class="bold"><strong>-R</strong></span>: 在生成索引文件时，搜索子目录树中的代码
    </li>
<li><span class="bold"><strong>-b</strong></span>: 只生成索引文件，不进入cscope的界面
    </li>
<li><span class="bold"><strong>-q</strong></span>: 生成cscope.in.out和cscope.po.out文件，加快cscope的索引速度
    </li>
<li><span class="bold"><strong>-k</strong></span>: 在生成索引文件时，不搜索/usr/include目录
    </li>
<li><span class="bold"><strong>-i</strong></span>: 如果保存文件列表的文件名不是cscope.files时，需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”<span class="bold"><strong>-</strong></span>“，表示由标准输入获得文件列表。
    </li>
<li><span class="bold"><strong>-I</strong></span><span class="emphasis"><em>dir</em></span>: 在<span class="bold"><strong>-I</strong></span>选项指出的目录中查找头文件
    </li>
<li><span class="bold"><strong>-u</strong></span>: 扫描所有文件，重新生成交叉索引文件
    </li>
<li><span class="bold"><strong>-C</strong></span>: 在搜索时忽略大小写
    </li>
<li><span class="bold"><strong>-P</strong></span><span class="emphasis"><em>path</em></span>: 在以相对路径表示的文件前加上的path，这样，你不用切换到你数据库文件所在的目录也可以使用它了。
    </li>
</ul>
</div>
<p>
    要在vim中使用cscope的功能，需要在<a class="link" href="http://easwy.com/blog/archives/advanced-vim-skills-solve-compile-problem/" target="_top">编译vim</a>时选择”<span class="emphasis"><em>+cscope</em></span>“。vim的cscope接口先会调用cscope的命令行接口，然后分析其输出结果找到匹配处显示给用户。
  </p>
<p>
    在vim中使用cscope非常简单，首先调用”<span class="command"><strong>cscope add</strong></span>“命令添加一个cscope数据库，然后就可以调用”<span class="command"><strong>cscope find</strong></span>“命令进行查找了。vim支持8种cscope的查询功能，如下：
  </p>
<div class="itemizedlist">
<ul type="disc">
<li><span class="bold"><strong>s:</strong></span> 查找C语言符号，即查找函数名、宏、枚举值等出现的地方
    </li>
<li><span class="bold"><strong>g:</strong></span> 查找函数、宏、枚举等定义的位置，类似ctags所提供的功能
    </li>
<li><span class="bold"><strong>d:</strong></span> 查找本函数调用的函数
    </li>
<li><span class="bold"><strong>c:</strong></span> 查找调用本函数的函数
    </li>
<li><span class="bold"><strong>t:</strong></span> 查找指定的字符串
    </li>
<li><span class="bold"><strong>e:</strong></span> 查找egrep模式，相当于egrep功能，但查找速度快多了
    </li>
<li><span class="bold"><strong>f:</strong></span> 查找并打开文件，类似vim的find功能
    </li>
<li><span class="bold"><strong>i:</strong></span> 查找包含本文件的文件
    </li>
</ul>
</div>
<p>
    例如，我们想在vim 7.0的源代码中查找调用do_cscope()函数的函数，我们可以输入：”<span class="command"><strong>:cs find c do_cscope</strong></span>“，回车后发现没有找到匹配的功能，可能并没有函数调用do_cscope()。我们再输入”<span class="command"><strong>:cs find s do_cscope</strong></span>“，查找这个C符号出现的位置，现在vim列出了这个符号出现的所有位置。
  </p>
<p>
    我们还可以进行字符串查找，它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式，这类似于egrep程序的功能，但它是在交叉索引数据库中查找，速度要快得多。
  </p>
<p>
    vim提供了一些选项可以调整它的cscope功能：
  </p>
<div class="itemizedlist">
<ul type="disc">
<li><span class="emphasis"><em>cscopecscopeprg</em></span>选项用于设置cscope程序的位置。
    </li>
<li><span class="emphasis"><em>cscopecscopequickfix</em></span>设定是否使用quickfix窗口来显示cscope的结果，详情请”<span class="command"><strong>:help cscopequickfix</strong></span>“；
    </li>
<li>
      如果你想vim同时搜索tag文件以及cscope数据库，设置<span class="emphasis"><em>cscopecscopetag</em></span>选项；
    </li>
<li><span class="emphasis"><em>cscopecscopetagorder</em></span>选项决定是先查找tag文件还是先查找cscope数据库。设置为0则先查找cscope数据库，设置为1先查找tag文件。我通常设置为1，因为在tag文件中查找到的结果，会把最佳匹配列在第一位。
    </li>
</ul>
</div>
<p>
    vim的手册中给出了使用cscope的建议方法，使用命令”<span class="command"><strong>:help cscope-suggestions</strong></span>“查看。
  </p>
<p>
    下面是我的vimrc中关于cscope接口的设置：
  </p>
<pre class="programlisting">

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 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 &lt;C-@&gt;s :cs find s &lt;C-R&gt;=expand("&lt;cword&gt;")&lt;CR&gt;&lt;CR&gt;
nmap &lt;C-@&gt;g :cs find g &lt;C-R&gt;=expand("&lt;cword&gt;")&lt;CR&gt;&lt;CR&gt;
nmap &lt;C-@&gt;c :cs find c &lt;C-R&gt;=expand("&lt;cword&gt;")&lt;CR&gt;&lt;CR&gt;
nmap &lt;C-@&gt;t :cs find t &lt;C-R&gt;=expand("&lt;cword&gt;")&lt;CR&gt;&lt;CR&gt;
nmap &lt;C-@&gt;e :cs find e &lt;C-R&gt;=expand("&lt;cword&gt;")&lt;CR&gt;&lt;CR&gt;
nmap &lt;C-@&gt;f :cs find f &lt;C-R&gt;=expand("&lt;cfile&gt;")&lt;CR&gt;&lt;CR&gt;
nmap &lt;C-@&gt;i :cs find i ^&lt;C-R&gt;=expand("&lt;cfile&gt;")&lt;CR&gt;$&lt;CR&gt;
nmap &lt;C-@&gt;d :cs find d &lt;C-R&gt;=expand("&lt;cword&gt;")&lt;CR&gt;&lt;CR&gt;
 </pre>
<p>
    下面的两个链接是cscope主页提供的cscope使用方法，也可以作为参考：
  </p>
<p>
    vim/cscope指导：<a class="link" href="http://cscope.sourceforge.net/cscope_vim_tutorial.html" target="_blank">http://cscope.sourceforge.net/cscope_vim_tutorial.html</a>
  </p>
<p>
    在大项目中使用cscope：<a class="link" href="http://cscope.sourceforge.net/large_projects.html" target="_blank">http://cscope.sourceforge.net/large_projects.html</a>
  </p>
<p>
    在vim的网站上有很多与cscope相关的插件，有兴趣可以去看一下。
  </p>
<p>
    我以前写的<a class="link" href="http://easwy.com/blog/archives/vim-cscope-ctags/" target="_blank">Vim + Cscope/Ctags</a>。
  </p>
<p>
    <span class="bold"><strong>[参考文档]</strong></span>
  </p>
<div class="itemizedlist">
<ul type="disc">
<li>
      vim帮助文件
    </li>
<li><a class="link" href="http://vimcdoc.sourceforge.net/" target="_blank">vim中文手册</a></li>
<li><a class="link" href="http://cscope.sourceforge.net/" target="_blank">http://cscope.sourceforge.net/</a></li>
<li><a class="link" href="http://iamphet.nm.ru/cscope/" target="_blank">http://iamphet.nm.ru/cscope/</a></li>
<li>
      cscope手册
    </li>
</ul>
</div>
<p>
    <span class="bold"><strong>&lt;&lt; </strong></span><a class="link" href="http://easwy.com/blog/archives/advanced-vim-skills-catalog/" target="_top">返回vim使用进阶: 目录</a>
</p>
<div class="posturl">
<p><span class="bold"><strong>原创文章，请阅读页脚的<a href="#license">许可方式</a>，转载请注明：</strong></span>转载自<a class="link" href="http://easwy.com/blog/" target="_top">易水博客</a> [ <a class="link" href="http://easwy.com/blog/" target="_top">http://easwy.com/blog/</a> ]</p>
<p><span class="bold"><strong>本文链接地址:</strong></span> <a class="link" href="http://easwy.com/blog/archives/advanced-vim-skills-cscope/" target="_top">http://easwy.com/blog/archives/advanced-vim-skills-cscope/</a></p>
</div>
<p style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">文章的脚注信息由WordPress的<a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl插件</a>自动生成</p>
<div class="fixed"></div><div id="related_posts"><h3  class="related_post_title">相关文章</h3><ul class="related_post">
<li><a href='http://easwy.com/blog/archives/vim-cscope-ctags/' rel='bookmark' title='vi/Vim + Cscope/Ctags'>vi/Vim + Cscope/Ctags</a></li>
<li><a href='http://easwy.com/blog/archives/advanced-vim-skills-quickfix-mode/' rel='bookmark' title='vi/vim使用进阶: 剑不离手 &#8211; quickfix'>vi/vim使用进阶: 剑不离手 &#8211; quickfix</a></li>
<li><a href='http://easwy.com/blog/archives/advanced-vim-skills-netrw-bufexplorer-winmanager-plugin/' rel='bookmark' title='vi/vim使用进阶: 文件浏览和缓冲区浏览'>vi/vim使用进阶: 文件浏览和缓冲区浏览</a></li>
</div><div class="fixed"></div>]]></content:encoded>
			<wfw:commentRss>http://easwy.com/blog/archives/advanced-vim-skills-cscope/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>vi/Vim + Cscope/Ctags</title>
		<link>http://easwy.com/blog/archives/vim-cscope-ctags/</link>
		<comments>http://easwy.com/blog/archives/vim-cscope-ctags/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 05:08:21 +0000</pubDate>
		<dc:creator>Easwy</dc:creator>
				<category><![CDATA[文本处理]]></category>
		<category><![CDATA[cscope]]></category>
		<category><![CDATA[ctags]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://easwy.com/blog/?p=123</guid>
		<description><![CDATA[本文介绍配置vim+cscope/ctags开发环境的方法。 <a href="http://easwy.com/blog/archives/vim-cscope-ctags/">Continue reading <span class="meta-nav">&#8594;</span></a><div class="fixed"></div><div id="related_posts"><h3  class="related_post_title">相关文章</h3><ul class="related_post">
<li><a href='http://easwy.com/blog/archives/advanced-vim-skills-cscope/' rel='bookmark' title='vi/vim使用进阶: 程序员的利器 &#8211; cscope'>vi/vim使用进阶: 程序员的利器 &#8211; cscope</a></li>
<li><a href='http://easwy.com/blog/archives/automatically_update_ctags_tag_cscope_database/' rel='bookmark' title='为vi/vim自动更新tag文件和cscope数据库'>为vi/vim自动更新tag文件和cscope数据库</a></li>
<li><a href='http://easwy.com/blog/archives/vim-resources-collection/' rel='bookmark' title='vim资源收集'>vim资源收集</a></li>
</div><div class="fixed"></div>]]></description>
			<content:encoded><![CDATA[<p>使用vim + cscope/ctags，就可以实现SourceInsight的功能，以后可以不再用盗版SouceInsight读代码了。<br />按照vim里cscope的参考手册(在vim中执行”:help cscope”命令)，把cscope功能加到.vimrc里后(需要你的vim在编译时选择了”&#8211;enable-cscope”选项，否则你需要重新编译vim)，配置就算完成了。然后用下面的命令生成代码的符号索引文件：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; width: 95%;">
<div><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">cscope</span>&nbsp;-Rbkq</span></div>
</div>
<p>
<br />这个命令会生成三个文件：cscope.out, cscope.in.out, cscope.po.out。<br />其中cscope.out是基本的符号索引，后两个文件是使用”-q”选项生成的，可以加快cscope的索引速度。<br />上面所用到的命令参数，含义如下：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;"><span style="color: #0000ff;">-R</span>:&nbsp;在生成索引文件时，搜索子目录树中的代码<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;">-b</span>:&nbsp;只生成索引文件，不进入cscope的界面<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;">-k</span>:&nbsp;在生成索引文件时，不搜索</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">include目录<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;">-q</span>:&nbsp;生成cscope</span><span style="color: #000000;">.</span><span style="color: #000000;">in</span><span style="color: #000000;">.</span><span style="color: #000000;">out和cscope</span><span style="color: #000000;">.</span><span style="color: #000000;">po</span><span style="color: #000000;">.</span><span style="color: #000000;">out文件，加快cscope的索引速度</span></div>
</div>
<p>接下来，就可以在vim里读代码了。<br />不过在使用过程中，发现无法找到C++的类、函数定义、调用关系。仔细阅读了cscope的手册后发现，原来cscope在产生索引文件时，只搜索类型为C, lex和yacc的文件(后缀名为.c, .h, .l, .y)，C++的文件根本没有生成索引。不过按照手册上的说明，cscope支持c++和Java语言的文件。<br />于是按照cscope手册上提供的方法，先产生一个文件列表，然后让cscope为这个列表中的每个文件都生成索引。<br />为了方便使用，编写了下面的脚本来更新cscope和ctags的索引文件：</p>
<pre class="programinglist">
#!/bin/sh

find . -name "*.h" -o -name "*.c"-o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R
</pre>
<p>
<br />这个脚本，首先使用find命令，查找当前目录及子目录中所有后缀名为”.h”, “.c”和”.cc”的文件，并把查找结果重定向到文件cscope.files中。<br />然后cscope根据cscope.files中的所有文件，生成符号索引文件。<br />最后一条命令使用ctags命令，生成一个tags文件，在vim中执行”:help tags”命令查询它的用法。它可以和cscope一起使用。</p>
<p>目前只能在unix系列操作系统下使用cscope，虽然也有windows版本的cscope，不过还有很多bug。在Linux技术中坚站上看到有作者在win2000上成功运行了gvim + cscope，详情可以参阅：<br />　　<a  href="http://www.chinalinuxpub.com/bbs/showthread.php?t=30185" target="_blank">http://www.chinalinuxpub.com/bbs/showthread.php?t=30185</a><br />
(2009/04/06更新)网友<a href="http://sf.net/projects/mslk">mslk</a>提供了cscope 15.7的win32编译版本下载，下载地址：<br />
<a href="http://sourceforge.net/project/showfiles.php?group_id=196604&#038;package_id=232374">http://sourceforge.net/project/showfiles.php?group_id=196604&#038;package_id=232374</a><br />
感谢他的辛勤工作，大家有时间去他的<a href="http://sf.net/projects/mslk">MSLK</a>项目看看，这个项目目的是为Linux下的工具提供预编译的windows版本。</p>
<p>在vim的网站上，也有人在cygwin中成功运行了vim + cscope，详情请参阅：<br />　　<a href="http://vim.sourceforge.net/tips/tip.php?tip_id=338" target="_blank">http://vim.sourceforge.net/tips/tip.php?tip_id=338</a><br />另外，还有人在windows上安装了XFree86包，然后在Xwindow中运行gvim + cscope。这同样可以在上面的网页中看到。</p>
<p>cscope的主页在：<a href="http://cscope.sourceforge.net/" target="_blank">http://cscope.sourceforge.net/</a></p>
<p>在vim的网站上，有很多和cscope相关的插件，可以去找一下你有没有所感兴趣的。搜索结果在这里：　<a href="http://www.vim.org/scripts/script_search_results.php?keywords=cscope&amp;script_type=&amp;order_by=rating&amp;direction=descending&amp;search=search" target="_blank">点这里</a></p>
<p>另外，我的<a href="http://easwy.com/blog/archives/advanced-vim-skills-catalog/">vim使用进阶</a>系列文章介绍了vim的更多特性。</p>
<div class="posturl">
<p><span class="bold"><strong>原创文章，请阅读页脚的<a href="#license">许可方式</a>，转载请注明：</strong></span>转载自<a class="link" href="http://easwy.com/blog/" target="_top">易水博客</a> [ <a class="link" href="http://easwy.com/blog/" target="_top">http://easwy.com/blog/</a> ]</p>
<p><span class="bold"><strong>本文链接地址:</strong></span> <a class="link" href="http://easwy.com/blog/archives/vim-cscope-ctags/" target="_top">http://easwy.com/blog/archives/vim-cscope-ctags/</a></p>
</div>
<p style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">文章的脚注信息由WordPress的<a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl插件</a>自动生成</p>
<div class="fixed"></div><div id="related_posts"><h3  class="related_post_title">相关文章</h3><ul class="related_post">
<li><a href='http://easwy.com/blog/archives/advanced-vim-skills-cscope/' rel='bookmark' title='vi/vim使用进阶: 程序员的利器 &#8211; cscope'>vi/vim使用进阶: 程序员的利器 &#8211; cscope</a></li>
<li><a href='http://easwy.com/blog/archives/automatically_update_ctags_tag_cscope_database/' rel='bookmark' title='为vi/vim自动更新tag文件和cscope数据库'>为vi/vim自动更新tag文件和cscope数据库</a></li>
<li><a href='http://easwy.com/blog/archives/vim-resources-collection/' rel='bookmark' title='vim资源收集'>vim资源收集</a></li>
</div><div class="fixed"></div>]]></content:encoded>
			<wfw:commentRss>http://easwy.com/blog/archives/vim-cscope-ctags/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

