2011-08-24 21 views
5

Tôi đang cố gắng tạo các bảng TAGS bằng cách sử dụng các dấu thập phân cho một dự án phần mềm lớn. Tệp TAGS kết thúc có các mục nhập vào các tệp không tồn tại ở cấp cao nhất thay vì các tệp tồn tại trong thư mục con do các chỉ thị #line trong tệp .c được tạo ra lex/yacc tham chiếu đến tên tệp không đủ tiêu chuẩn thay vì # dòng bao gồm thư mục con chứa tệp.Bảng Emacs TAGS bị nhầm lẫn bởi chỉ thị #line trong các tệp lex/yacc

Làm cách nào để có được các bảng TAGS tạo ra với các chỉ thị #line này được giải quyết đúng cách vào tệp hiện có trong thư mục con thay vì được hiểu là tệp cấp cao nhất?

tôi chạy etags như thế này từ trên thư mục cấp:

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 

Nhưng tôi có một tập tin, hành động/Par.c, có chứa các dòng sau vào giữa các tập tin được tạo ra:

#define T_NUM 274 
#define T_STRING 275 

#line 5 "Par.y" 

#undef actCPMeshConfigIn_yywrap 
#define actCPMeshConfigIn_YYMAXDEPTH 20000 

nào dẫn đến TAGS mục bảng các nội dung sau:

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

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

Nhưng những tập tin Par.y là hành động ual nằm ở hành động/Par.y, nhưng chỉ thị #line liên quan đến tệp hiện tại, nhưng TAGS làm cho nó liên quan đến tệp TAGS được tạo.

Không thay đổi cách xây dựng dự án, làm cách nào để tạo các tệp TAGS để các chỉ thị #line này được hiểu đúng là có liên quan đến tệp chúng xảy ra bên trong? Ngoài ra, làm thế nào tôi có thể bỏ qua những tập tin phiền hà một cách dễ dàng?

Trả lời

0

Giải pháp thay vì chạy Exuberant Ctags ở chế độ etgas và đệ quy. Bạn gây ra ctags exuberant để chạy trong chế độ etags bằng cách tạo ra một liên kết có tên etags để ctags exuberant và nó phát hiện nó đã được đưa ra như etags và cư xử thích hợp:

etags -R.

Ngoài ra -e nghĩa etags chế độ:

ctags -e -R.