<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Cscope on kamuszhou&#39;s blog</title>
    <link>https://ykyi.net/tags/cscope/</link>
    <description>Recent content in Cscope on kamuszhou&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 12 Jun 2012 11:45:14 +0000</lastBuildDate>
    <atom:link href="https://ykyi.net/tags/cscope/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>使用Cscope阅读大型工程Linux内核的源代码教程</title>
      <link>https://ykyi.net/?p=586/</link>
      <pubDate>Tue, 12 Jun 2012 11:45:14 +0000</pubDate>
      <guid>https://ykyi.net/?p=586/</guid>
      <description>&lt;p&gt;Cscope是一个非常有用的工具，可以用来方便地阅读很大型工程的源代码。较之使用传统的Unix工具grep，使用Cscope可以省下你一大笔时间，大大提高阅读代码的效率。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;通过本教程，我会教给你如何使用Cscope阅读Linux内核的源代码。毫无疑问，你可以举一反三，用同样的方法阅读其它的大型工程的源代码，不仅仅是C语言写的工程，也可以是Java或者C++或者C#开发的工程。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;STEP 1 获得源代码：&lt;/p&gt;
&lt;p&gt;去到Linux内核的网站http://www.kernel.org下载随便一个版本的Linux内核源代码压缩包。然后解压缩，把源代码释放到某个目录。本文假设你把源代码释放到 /home/code/linux-2.6.26。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;STEP 2 选择一个目录存放Cscope所需要的数据库文件。&lt;/p&gt;
&lt;p&gt;本文假设选择用/home/cscope目录存放cscope的数据库文件和其它一些相关文件。&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;STEP 3 生成文件 cscope.files&lt;/p&gt;
&lt;p&gt;在最简单的情况下，工程目录下的所有源代码都是我要关心的，于是可以跳过下面所述，简单地在工程的根目录下运行&amp;rsquo;cscope -R&amp;rsquo;命令，这样Cscope就会在工程目录下所有源代码中处理相关工作。&lt;/p&gt;
&lt;p&gt;但是你关心的代码并必工程目录下所有的代码，你还需要排除很多目录下的大量代码该如何做呢？在这种情况下，你需要生成一个文件cscope.files，这个文件包含 了所有cscope将要扫描的文件的文件名，每个名字占一行。最好使用绝对路径，这样你就可以在其它目录下，而不是现在创建cscope.files文件的目录下使用这个刚创建的数据库。下面的代码将完成这个任务（假设我要所有的java文件）：&lt;/p&gt;
&lt;p&gt;$ cd /   &lt;/p&gt;
&lt;p&gt;$ find /my/project/dir -name &amp;ldquo;*.java&amp;rdquo; &amp;gt; /my/cscope/dir/cscope.files&lt;/p&gt;
&lt;p&gt;对于Linux内核来讲，情况还要稍微复杂一点。因为我们还要排除好些文件夹，这些文件夹有存放文档的文件夹，存放脚本的文件夹，与处理器架构相关的汇编代码的目录夹，与处理器架构相关的C代码除了x86（大多数人已经仅仅对x86感兴趣），另外还会排除所有的驱动文件目录夹，因为驱动占了内核很大一部分，但驱动代码通常不是我们要关心的。如果不排除这些目录的话，cscope当然也能工作，但是却给我们增加了麻烦，因为大大增加了重复的定义出现的概率。下面看我怎么做：&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;    $ LNX=/home/linux-2.6.26&lt;/p&gt;
&lt;p&gt;    $ cd /    &lt;/p&gt;
&lt;p&gt;    $ find  $LNX                                                                \&lt;/p&gt;
&lt;p&gt;    -path &amp;quot;$LNX/arch/*&amp;quot; ! -path &amp;quot;$LNX/arch/i386*&amp;quot; -prune -o               \&lt;/p&gt;
&lt;p&gt;    -path &amp;quot;$LNX/include/asm-*&amp;quot; ! -path &amp;quot;$LNX/include/asm-i386*&amp;quot; -prune -o \&lt;/p&gt;
&lt;p&gt;    -path &amp;quot;$LNX/tmp*&amp;quot; -prune -o                                           \&lt;/p&gt;
&lt;p&gt;    -path &amp;quot;$LNX/Documentation*&amp;quot; -prune -o                                 \&lt;/p&gt;
&lt;p&gt;    -path &amp;quot;$LNX/scripts*&amp;quot; -prune -o                                       \&lt;/p&gt;
&lt;p&gt;    -path &amp;quot;$LNX/drivers*&amp;quot; -prune -o                                       \&lt;/p&gt;
&lt;p&gt;    -name &amp;quot;*.[chxsS]&amp;quot; -print &amp;gt;/home/jru/cscope/cscope.files&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
