2011-08-24 9 views
5

Sto provando a generare tabelle TAG utilizzando gli etags per un progetto software di grandi dimensioni. Il file TAGS finisce per avere voci di file inesistenti al livello superiore invece di quelli esistenti in una sottodirectory a causa delle direttive #line nei file .c lex/yacc generati che fanno riferimento a un nome di file non qualificato invece di un # linea che include la sottodirectory contenente il file.La tabella TAGS di Emacs è confusa dalla direttiva #line nei file lex/yacc

Come posso generare le tabelle TAGS con queste direttive #line correttamente risolte in un file esistente nella sottodirectory anziché essere interpretate come file di livello superiore?

ho eseguito etags come questo dall'alto directory di livello:

rm -f TAGS; find . \(-not -regex '.*include/.*' \) 
       -a \(-name '*.h' -o -name '*.hh' -o -name '*.y' -o -name '*.l' 
        -o -name '*.cc' -o -name '*.cpp' -o -name '*.hpp' -o -name '*.c' 
        -o -name '*.inl' \) 
      | xargs etags -o TAGS --append 

Ma io ho un file, act/Par.c, che contiene le seguenti righe nel mezzo del file generato:

#define T_NUM 274 
#define T_STRING 275 

#line 5 "Par.y" 

#undef actCPMeshConfigIn_yywrap 
#define actCPMeshConfigIn_YYMAXDEPTH 20000 

che si traduce in voci della tabella TAGS delle seguenti operazioni:

act/Par.c,1160 
[...] 
#define T_NUM 92,2870 
#define T_STRING 93,2888 

Par.y,1320 
#undef actCPMeshConfigIn_yywrap20, 
#define actCPMeshConfigIn_YYMAXDEPTH 22, 

Ma il file Par.y è atto localmente in atto/Par.y, ma la direttiva #line è relativa al file corrente, tuttavia TAGS lo rende relativo al file TAGS generato.

Senza modificare la modalità di creazione del progetto, come è possibile generare i file TAG in modo che tali direttive #line vengano correttamente interpretate come relative al file in cui si verificano? In alternativa, come posso saltare facilmente questi file fastidiosi?

risposta

0

La soluzione deve invece eseguire Exuberant Ctags in modalità etgas e in modo ricorsivo. Si causa ctags esuberanti per l'esecuzione in modalità etags creando un link etags chiamato al ctags esuberanti e rileva è stato lanciato come etags e si comporta in modo appropriato:

etags -R.

alternativa -e indica la modalità etags:

ctags -R -e.

Problemi correlati