如何运行cscope只搜索任意位置的源代码,并将交叉引用文件写入另一个任意位置?

时间:2016-03-08 14:19:18

标签: cscope

这就是我的源代码目录。

learner@centos:~/lab$ tree
.
+-- cscope.out
+-- src
¦   +-- bar
¦   ¦   +-- bar.c
¦   ¦   +-- baz
¦   ¦       +-- baz.c
¦   +-- foo.c
¦   +-- qux
¦       +-- qux.c
+-- work

我想在文件系统的任意位置创建源代码文件的交叉引用(在此示例中为~/lab/src/bar)并将交叉引用写入此处的任意位置(~/lab/work/cscope.out)案件。

交叉引用中不应包含~/lab/src/bar之外的任何内容。

当然,以下命令不起作用。它还包括交叉引用中的~/lab/src/*.c~/lab/src/qux/*.c

learner@centos:~/lab$ cscope -b -R -f ~/lab/work/cscope.out
learner@centos:~/lab$ grep "@.*src" ~/lab/work/cscope.out
        @src/bar/bar.c
        @src/bar/baz/baz.c
        @src/foo.c
        @src/qux/qux.c

以下命令也会遇到同样的问题,因为默认情况下会自动隐含搜索当前目录。

learner@centos:~/lab$ rm ~/lab/work/cscope.out
learner@centos:~/lab$ cscope -b -R -f ~/lab/work/cscope.out -s ~/lab/src/bar
learner@centos:~/lab$ grep "@.*src" ~/lab/work/cscope.out
        @/home/learner/lab/src/bar/bar.c
        @/home/learner/lab/src/bar/baz/baz.c
        @src/bar/bar.c
        @src/bar/baz/baz.c
        @src/foo.c
        @src/qux/qux.c

以下命令不起作用。

learner@centos:~/lab$ rm ~/lab/work/*
learner@centos:~/lab$ cscope -b -R -f ~/lab/work/cscope.out ~/lab/src/bar
Cannot open file /home/learner/lab/src/bar

使用ctags,类似的命令工作正常。

learner@centos:~/lab$ ctags -R -f ~/lab/work/tags ~/lab/src/bar
learner@centos:~/lab$ grep src ~/lab/work/tags
bar     /home/learner/lab/src/bar/bar.c  /^void bar()$/;"        f
baz     /home/learner/lab/src/bar/baz/baz.c      /^void baz()$/;"        f
main    /home/learner/lab/src/bar/bar.c  /^int main()$/;"        f
main    /home/learner/lab/src/bar/baz/baz.c      /^int main()$/;"        f

我怎样才能用cscope做同样的事情?

到目前为止,我发现的唯一解决方法是首先更改为空目录,然后使用-s ~/lab/src/bar运行cscope命令。这将搜索指定的目录以及当前目录,但由于当前目录为空,因此只有指定目录中的文件才会包含在交叉引用中。

learner@centos:~/lab$ rm ~/lab/work/*
learner@centos:~/lab$ cd ~/lab/work
learner@centos:~/lab/work$ cscope -b -R -f ~/lab/work/cscope.out -s ~/lab/src/bar
learner@centos:~/lab/work$ grep "@.*src" ~/lab/work/cscope.out
        @/home/learner/lab/src/bar/bar.c
        @/home/learner/lab/src/bar/baz/baz.c

是否有其他解决方案不需要我将当前目录更改为空目录?

注意:解决方案应适用于一般用例。

  • 交叉引用中可能还有数百个其他文件和目录(例如上例中的foo.cqux)。
  • 可能存在包含其他扩展名的文件,例如.h.l.y等需要交叉引用的文件。

1 个答案:

答案 0 :(得分:3)

这里的诀窍是知道cscope也会接受一个源文件列表而不是自己搜索。因此,传递文件列表是需要解决的问题。

找到救援。

application.properties

在你的情况下

cscope -b -f <path_to_refdir>/cscope.out `find <path_of_desired_src_tree> -name *.[chly]`