如何优化ctags使其生成C++代码标签的效率更高?
针对大体积C++项目,你可以通过追加以下参数大幅提升标签生成效率:
- 排除无关目录:添加
--exclude参数跳过不需要扫描的构建目录、第三方依赖目录、版本控制目录等,示例:
该优化减少无效扫描量,是提升性能最明显的手段。ctags -nR --exclude=build --exclude=third_party --exclude=.git - 限定扫描语言范围:默认ctags会扫描所有支持的语言格式文件,C++项目可添加
--languages=C,C++参数跳过其他无关格式文件的扫描。 - 裁剪生成的标签类型:C++默认会生成大量冗余标签,你可以根据自身使用需求定制标签类型,比如不需要枚举值、宏标签的话,可使用
--c++-kinds=+p-fvx参数,去掉不需要的标签类型对应的字母标识,减少标签生成的计算开销。 - 指定扫描文件列表:可以通过
find命令先导出项目内所有需要扫描的源文件路径,再通过-L参数传入ctags,避免递归扫描时匹配到无关文件,示例:
这种方式可以直接复用Makefile的编译文件范围,不需要你手动指定头文件路径,生成的标签精度和Eclipse的索引效果基本一致。find src -name "*.cpp" -o -name "*.h" > filelist.txt ctags -n -L filelist.txt
你在Linux发行版中默认安装的ctags通常分为两种,两者没有优化迭代的关系:
- GNU ctags:属于GNU binutils项目的内置组件,功能少、更新频率低,对C++新语法的支持较差,性能也偏低,不是Exuberant Ctags的优化版本。
- Exuberant Ctags:独立维护的通用标签生成工具,支持超过40种编程语言,对C++的模板、重载、命名空间等特性支持更好,目前绝大多数发行版中的
ctags命令默认软链接指向的就是Exuberant Ctags,你可以执行ctags --version命令查看输出信息,包含Exuberant Ctags字样即为该版本。
目前还有Universal Ctags作为Exuberant Ctags的分支版本持续维护,语法支持和性能表现都更优,兼容原有所有命令参数。
内容的提问来源于stack exchange,提问作者badri
相关产品推荐
相关产品推荐

