我正在尝试在我的 Makefile 中创建一个目标来自动创建tags
使用 ctags 文件。
我有一个源文件列表(.cpp 文件),但我没有所有头文件的列表(我使用g++ -MM
创建标头依赖项列表)。
我本以为 ctags 会遵循任何#include
生成标签时 .cpp 文件中的指令,但似乎我的假设是错误的。
如果我创建一个像这样的简单标签文件:
ctags --fields=+iaS --extra=+q myClass.cpp
然后进入 vim 并输入对象名称,后跟“.”我收到错误“未找到模式”。
但是,如果我像这样编译标签文件:
ctags --fields=+iaS --extra=+q myClass.cpp myClass.h
在 vim 中做同样的事情,我得到了一个可爱的自动完成的成员变量/函数列表。
我的“myClass.cpp”文件中的第一行是
#include "myClass.h"
那么为什么 ctags 不使用它来解析头文件呢?
没有。不幸的是/幸运的是。
您自己的包含之后不会有太多问题。问题始于
幸运的是,您自己的库的问题可以通过执行类似的操作轻松解决
ctags *.h *.cpp
ctags -R src/
你可以一起破解一些东西cpp
进而ctags
。这样工作起来就不方便。一个半有趣的方法是修补 ctags 以遵循#line
杂注在cpp
的输出,因此将所有标签与其各自的源相关联。
然而,这种方法将not按照您对任何预处理器符号/定义的期望工作(宏已扩展,因此您无法通过 ctags 找到宏)。
通常的方式要解决这个问题,是为您的外部库生成一个“标准”标签文件,并且
:se tags+=/home/me/libs/tags.stdc++
:se tags+=/home/me/libs/tags.libsox
一些库有关于如何制作有用的标签文件以与其库一起使用的教程(或假设特定文件夹布局的预构建标签文件)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)