Я пытаюсь сгенерировать таблицы TAGS, используя etags для большого программного проекта.Файл TAGS в конечном итоге содержит записи в несуществующие файлы на верхнем уровне вместо существующих в подкаталоге из-за директив #line в сгенерированных lex / yacc файлах .c, которые ссылаются на неквалифицированное имя файла вместо #строка, которая включает в себя подкаталог, содержащий файл.
Как я могу получить таблицы TAGS для генерации с этими директивами #line, правильно разрешенными в существующий файл в подкаталоге, вместо того, чтобы интерпретироваться как файлы верхнего уровня?
Я запускаю etags следующим образом из каталога верхнего уровня:
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
Но у меня есть файл act / Par.c, который содержит следующие строки в середине сгенерированного файла:
#define T_NUM 274
#define T_STRING 275
#line 5 "Par.y"
#undef actCPMeshConfigIn_yywrap
#define actCPMeshConfigIn_YYMAXDEPTH 20000
Что приводит к следующим записям в таблице TAGS:
act/Par.c,1160
[...]
#define T_NUM 92,2870
#define T_STRING 93,2888
Par.y,1320
#undef actCPMeshConfigIn_yywrap20,
#define actCPMeshConfigIn_YYMAXDEPTH 22,
Но файл Par.y фактически расположен в act / Par.y, но директива #line имеет видотносительно текущего файла, но TAGS делает его относительно сгенерированного файла TAGS.
Без изменения способа создания проекта, как я могу сгенерировать файлы TAGS так,что эти директивы #line правильно интерпретируются как относящиеся к файлу, в котором они находятся?Кроме того, как я могу легко пропустить эти проблемные файлы?