在大项目中使用 Cscope (例如: Linux kernel)

如果你要涉及一个大的代码库,Cscope 会是一个非常有用的工具. 它可以通过快速、有目的的搜索为你节省很多时间,而不是像 grep 那样随机的对源文件手动搜索(对于大的代码库,grep 需要一段时间才能启动).

在这个教程中,你将学会如何针对一个大项目来设置 Cscope. 我们用到的例子是 Linux 内核源代码, 基本的步骤和其他大项目是一样的, 包括 C++ 和 JAVA 项目.

1.获取源代码. 首先要获取源代码. 可以从 下载内核源代码. 本教程中假设你下载的是 Linux 2.4.18 并且安装在 /home/jru/linux-2.4.18.

注意: 确保你有足够的磁盘空间: 内核压缩包只有 30 MB, 解压后会的源代码是 150 MB , 生成的 Cscope 数据库会占用额外的 20-100+ MB (这取决于你想要数据库包含多少内核代码). 有必要的话,可以把源代码和 Cscope 数据库放在两个不同的磁盘分区 .

2.弄清楚你想要把 Cscope 数据库文件放在哪里. 我假设你会在 /home/jru/cscope 存放数据库和关联文件.

3.生成一个带有浏览文件列表的 cscope.files . 对于某些项目, 你可能想要在 Cscope 数据库中包含项目目录中的所有 C 源文件. 这种情况下可以跳过这一步, 只需在项目的顶层目录上执行 'cscope -R' 来构建你的 Cscope 数据库. 但是如果有些代码你不想包含, 或者你的项目包含 C++ 或 JAVA 源代码 (Cscope 默认只能解析 .c, .h, .y, 或 .l 文件), 就要生成一个 cscope.files 文件, 其中包含了想要 Cscope 扫描的所有文件名 (每个文件名占一行).

你有可能用到绝对路径 (至少在编辑器里使用 Cscope 数据库时需要), 这样就可以在你创建的目录之外使用数据库. 我展示的命令会先进入根目录, 这样就可以用 find 打印出绝对路径.

对于很多项目, find 命令可以这样用:

cd /

find /my/project/dir -name '*.java' >/my/cscope/dir/cscope.files

对于 Linux 内核, 就有点棘手, 因为我们想要排除文档和脚本目录下的代码, 还有除 Intel x86 外的所有芯片和体系结构的汇编代码(我想你的体系结构是 X86). 另外, 本例中我会排除所有的内核驱动代码 (这些代码超过要解析的代码总量的两倍, 会导致 Cscope 数据库膨胀, 并且包含了很多重复的定义, 通常更难搜素. 如果你对驱动代码感兴趣, 可以省略下面相关的行, 或者修改为只输出你感兴趣的驱动文件):

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

这里用到了find 命令, 在大项目中,这样做比手动编辑一个文件列表容易多了, 也可以从其他地方复制一个.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/21907.html