gpt4 book ai didi

vim - 可以让 ctags 遵循 #include 指令吗?

转载 作者:行者123 更新时间:2023-12-05 00:36:45 25 4
gpt4 key购买 nike

我试图在我的 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的输出,因此将所有标签与其各自的来源相关联。

    但是,对于任何预处理器符号/定义(宏已扩展,因此您将无法通过 ctags 找到宏),该方法不会像您期望的那样工作。

    常规方式解决这个问题,是为您的外部库生成一个“标准”标签文件,以及
    :se tags+=/home/me/libs/tags.stdc++
    :se tags+=/home/me/libs/tags.libsox

    等等。一些库有关于如何制作有用的标签文件以用于他们的库(或假设特定文件夹布局的预建标签文件)的教程

    关于vim - 可以让 ctags 遵循 #include 指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848911/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com