2014-09-23 56 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月。

相關問題