歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在大項目中使用 Cscope (例如: Linux kernel)

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

日期:2017/2/28 15:49:59   编辑:Linux教程

如果你要涉及一個大的代碼庫,Cscope 會是一個非常有用的工具. 它可以通過快速、有目的的搜索為你節省很多時間,而不是像 grep 那樣隨機的對源文件手動搜索(對於大的代碼庫,grep 需要一段時間才能啟動).

在這個教程中,你將學會如何針對一個大項目來設置 Cscope. 我們用到的例子是 Linux 內核源代碼, 基本的步驟和其他大項目是一樣的, 包括 C++ 和 JAVA 項目.

1.獲取源代碼. 首先要獲取源代碼. 可以從 http://www.kernel.org 下載內核源代碼. 本教程中假設你下載的是 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 數據庫時需要), 這樣www.linuxidc.com就可以在你創建的目錄之外使用數據庫. 我展示的命令會先進入根目錄, 這樣就可以用 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 命令, 在大項目中,這樣做比手動編輯一個文件列表容易多了, 也可以從其他地方復制一個.

Copyright © Linux教程網 All Rights Reserved