La directiva#line confunde la tabla Emacs TAGS en archivos lex/yacc
etag (1)
La solución es ejecutar en su lugar Ctags exuberantes en modo etgas y recursivamente. Causa ctags exuberantes para ejecutarse en modo etags creando un enlace llamado etags a los ctags exuberantes y detecta que se lanzó como etags y se comporta de manera adecuada:
etags -R.
Alternativamente -e significa modo etags:
ctags -e -R.
Estoy tratando de generar tablas TAGS usando etags para un gran proyecto de software. El archivo TAGS termina teniendo entradas para archivos inexistentes en el nivel superior en lugar de los existentes en un subdirectorio debido a las directivas #line en los archivos .c lex / yacc generados que hacen referencia a un nombre de archivo no calificado en lugar de un # línea que incluye el subdirectorio que contiene el archivo.
¿Cómo puedo generar las tablas TAGS para generar con estas directivas #line resueltas correctamente a un archivo existente en el subdirectorio en lugar de interpretarlas como archivos de nivel superior?
Puedo ejecutar etags como este desde el directorio de nivel superior:
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
Pero tengo un archivo, act / Par.c, que contiene las siguientes líneas en el medio del archivo generado:
#define T_NUM 274
#define T_STRING 275
#line 5 "Par.y"
#undef actCPMeshConfigIn_yywrap
#define actCPMeshConfigIn_YYMAXDEPTH 20000
Lo que resulta en entradas de la tabla TAGS de lo siguiente:
act/Par.c,1160
[...]
#define T_NUM 92,2870
#define T_STRING 93,2888
Par.y,1320
#undef actCPMeshConfigIn_yywrap20,
#define actCPMeshConfigIn_YYMAXDEPTH 22,
Pero el archivo Par.y en realidad se encuentra en act / Par.y, pero la directiva #line es relativa al archivo actual, pero TAGS lo hace en relación con el archivo TAGS generado.
Sin cambiar la forma en que construyo el proyecto, ¿cómo puedo generar los archivos TAGS para que estas directivas #line se interpreten correctamente como relativas al archivo en el que ocurren? Alternativamente, ¿cómo puedo omitir estos archivos problemáticos fácilmente?