我正在使用Exuberant Ctags v5.8和我要生成标签文件的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 /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.8 //
PACK test.c /^#define PACK(/;" d file:
PACK test.c /^typedef PACK(struct) {$/;" f
虽然我预期的标记文件内容应如下所示:
!_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 /dhiebert@users.sourceforge.net/
!_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 :(得分:0)
如果不自行预处理文件(例如,使用awk,如上所述)并且使用Exuberant Ctags对预处理版本进行操作,则无法直接完成此操作。
Excrant Ctags使用-I command line option来处理定义。它允许你忽略预处理器定义(例如-I PACK
),替换定义(例如-I PACK=FOO
),它允许你忽略标识符及其参数列表(例如-I PACK+
),但是这些选项都没有处理用其中一个参数替换宏。
您可以考虑将此请求作为新功能,但似乎不再积极开发。最后一次修订是在2009年7月。