针对大型c项目的跳转定义思考

没有相关工作经验,但对 ctags 很熟,强答一下 :rofl:

通过一些技巧可以把内核的 tags 文件减到 500M 以下:

$ pwd
/yard/code/linux-5.17.9
$ ctags -n --languages=C,C++,KConfig,Asm,LdScript --extras=-{fileScope} -f .tags -R
$ du -BM .tags
449M	.tags

这里的关键有二:

  1. -n 选项可以不生成 search pattern 而用行号代替,能节省不少空间。
  2. --extras=-{fileScope} 可以不生成具有 file scope(也就是从外面不能引用)的符号的 tag。

如果您不需要看某些文件夹的代码的话,可以把它们排除掉。比如排除 foo 文件夹:

--exclude=foo/*

不知道这个大小对您的工程可以接受吗 :rofl:

然后就是不要用 Emacs 的 TAGS 格式,TAGS 格式不能做二分搜索,查定义很慢。可以用我的 Citre,支持 ctags 原本的 tags 格式,速度很快。

2 个赞