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?