如何为linux C开发设置ctags?

问题描述 投票:1回答:1

我正在linux下进入C开发,但是我正在设置正确设置ctags来与vim一起工作。 Vim正确地注册了tags文件,并根据它提供完成。

但是,我不确定获得“必要”包括的正确方法是什么。目前我有一些“精心挑选”的标题:

AM_CTAGSFLAGS =             \
    --recurse=yes           \
    --tag-relative=yes      \
    --extras=*              \
    --fields=*              \
    --c-kinds=*             \
    --language-force=C      \
    /usr/include/bits       \
    /usr/include/fcntl.h    \
    /usr/include/stdio.h    \
    /usr/include/stdlib.h   \
    /usr/include/string.h   \
    /usr/include/sys        \
    /usr/include/unistd.h

在开始我只是把相同的标题,因为我有#include ...,但错过了一些东西(如/usr/include/bits/...)所以我添加了那些。

但我觉得,经过这么多年,某个地方的某个人必须想出更好的解决方案。那么,这通常是怎么做的?

c linux ctags exuberant-ctags universal-ctags
1个回答
1
投票

这是一个很好的问题,灰狼!

我已经使用这种方法多年了,这是我如何使用它:

  1. 为系统使用的逻辑组件生成标记文件。逻辑组件通常是您可能认为的其他语言的导入(即我使用的是OpenGL或某些声音库)。
  2. 对于给定的逻辑组件,您可能必须忽略头文件中的某些文本。这是为了防止ctags程序误解某些构造,从而在生成的文件中歪曲那些特定的标签(想想预处理器宏或编译器指令),甚至根本不将它们放入输出文件中。
  3. 将路径Vim变量修改为按顺序指向已生成的文件。我选择了一种最内在的模式。首先是项目代码本身,接下来是项目中的库,然后是单独的系统库,最后是表示“其他所有”的最终标记文件。

我通常有一个适用于特定标准的ANSI C标头(或C ++,如果你使用它)的单个标签文件(如果你使用C ++,通常是c99.c ++ 11),这通常是我的“其他”标签文件。

最难的部分是在忽略列表中输入ctags。由于您使用的是C语言,我假设您使用系统中的C标头(只是该语言应该提供的编译器标准标头)。我在生成这些时使用以下忽略列表(在Ubuntu 14.04上):

__attribute__
__attribute_deprecated__
__attribute_format_arg__+
__attribute_format_strfmon__+
__attribute_malloc__
__attribute_noinline__
__attribute_pure__
__attribute_used__
__attribute_warn_unused_result__
__attribute_alloc_size__+
__attribute_const__
__attribute_artificial__
__wur
__THROW
__THROWNL
__BEGIN_DECLS
__END_DECLS
__BEGIN_NAMESPACE_STD
__END_NAMESPACE_STD
__USING_NAMESPACE_STD+
__BEGIN_NAMESPACE_C99
__END_NAMESPACE_C99
__USING_NAMESPACE_C99+
__warndecl+
__warnattr+
__errordecl+
__flexarr=[]
__fortify_function
__REDICRECT+
__REDIRECT_NTH+
__REDIRECT_NTHNL+
__ASMNAME+
__ASMNAME2+
__nonnull+
__always_inline
__extern_inline=extern
__extern_always_inline=extern
__extension__
__restrict
__restrict_arr

这是最重要的部分。如果你没有看到你运行ctags的标题的输出很多,那可能就是正在发生的事情。它让我疯了,直到我弄明白了。那些让ctags不被愚弄。

就标题输入ctags而言,你有正确的想法。不要忘记通常位于其他位置的编译器特定的系统头文件,例如/ usr / include / x86_64-linux-gnu。这些将帮助您在必要时深入查看系统的常量。

© www.soinside.com 2019 - 2024. All rights reserved.