2014-09-23 35 views
0

我正在使用Exuberant Ctags v5.8和我想生成标签文件的C源代码示例如下,谢谢!如何使用ctags为c源代码生成适当的标签文件?

#define PACK(x) __packed x                                             

typedef PACK(struct) { 
    int a; 
    int b; 
    int c; 
} my_struct; 

PACK(void *) my_func(PACK(void *) var1, int var2) 
{ 
    *var1 = var2; 
    return var1; 
} 

这是生成的标记文件的内容:

,而我的预期标记文件的内容应如下:

!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ 
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ 
!_TAG_PROGRAM_AUTHOR Darren Hiebert /[email protected]/ 
!_TAG_PROGRAM_NAME Exuberant Ctags // 
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ 
!_TAG_PROGRAM_VERSION 5.8 // 
a test.c /^ int a;$/;" m struct:__anon1 file: 
b test.c /^ int b;$/;" m struct:__anon1 file: 
c test.c /^ int c;$/;" m struct:__anon1 file: 
my_func test.c /^void * my_func(void * var1, int var2)$/;" f 
my_struct test.c /^} my_struct;$/;" t typeref:struct:__anon1 file: 

我怎样才能得到后者的标签来自原始C源文件的文件?谢谢!

+0

@CodieCodeMonkey请检查我的问题更新。谢谢! – shark 2014-10-20 09:43:26

+0

对不起,对于迟到的回复,我唯一能想到的就是做一些预处理,例如,将AWK放入并行目录树中,用x替换PACK(x)。在并行树上运行ctags。 Exuberant ctags使用相对路径,因此您可以将标记文件移回原始目录树。 – 2015-02-04 21:07:32

回答

0

如果不自己预处理文件(例如,使用awk,如上所述)并且Exuberant Ctags在预处理版本上运行,则无法直接完成此操作。

Exuberant Ctags使用-I command line option来处理定义。它允许您忽略预处理器定义(例如-I PACK),定义的替换(例如-I PACK=FOO),它允许您忽略标识符及其参数列表(例如-I PACK+),但这些选项都不会处理将宏替换为其论据。

您可能会考虑将其作为新功能请求,但似乎并未积极开发。最后一次修订是在2009年7月。

相关问题