2011-08-24 21 views
5

मैं एक बड़ी सॉफ्टवेयर प्रोजेक्ट के लिए ईटैग का उपयोग करके टैग टेबल जेनरेट करने का प्रयास कर रहा हूं। टैग्स फ़ाइल को लेक्स/yacc जेनरेट की गई। सी फाइलों में #लाइन निर्देशों के कारण उप-निर्देशिका में मौजूदा लोगों की बजाय शीर्ष स्तर पर मौजूद गैर-मौजूद फ़ाइलों के लिए प्रविष्टियां होती हैं जो # के बजाय एक अयोग्य फ़ाइल नाम का संदर्भ देती हैं। लाइन जिसमें फ़ाइल युक्त उप-निर्देशिका शामिल है।Emacs TAGS तालिका lex/yacc फ़ाइलों में #line निर्देश द्वारा उलझन में है

शीर्ष-स्तरीय फ़ाइलों के रूप में व्याख्या किए जाने के बजाय उप-निर्देशिका में मौजूदा फ़ाइल में ठीक से हल किए गए इन #लाइन निर्देशों के साथ उत्पन्न करने के लिए TAGS तालिकाओं को कैसे प्राप्त किया जा सकता है?

मैं शीर्ष स्तर की निर्देशिका से इस तरह 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 

लेकिन मैं एक फ़ाइल है, अधिनियम/Par.c, कि उत्पन्न फ़ाइल के बीच में निम्नलिखित लाइनों में शामिल हैं:

#define T_NUM 274 
#define T_STRING 275 

#line 5 "Par.y" 

#undef actCPMeshConfigIn_yywrap 
#define actCPMeshConfigIn_YYMAXDEPTH 20000 

निम्नलिखित में से कौन से टैग तालिका प्रविष्टियों में परिणाम:

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 पर स्थित है, लेकिन #लाइन निर्देश वर्तमान फ़ाइल के सापेक्ष है, फिर भी TAGS इसे जेनरेट की गई TAGS फ़ाइल के सापेक्ष बनाता है।

मैं प्रोजेक्ट कैसे बना सकता हूं इसे बदलने के बिना, मैं TAGS फ़ाइलों को कैसे उत्पन्न कर सकता हूं ताकि इन #लाइन निर्देशों को ठीक से फ़ाइल के सापेक्ष होने के रूप में समझा जा सके? वैकल्पिक रूप से, मैं इन परेशानी फ़ाइलों को आसानी से कैसे छोड़ सकता हूं?

उत्तर

0

समाधान इसके बजाय एटगास मोड में Exuberant Ctags चलाने और हल करने के लिए समाधान है। आप विपुल ctags etags मोड में विपुल ctags के लिए एक लिंक नामित etags बनाने के द्वारा समाप्त हो और यह पता लगाता है यह etags के रूप में शुरू किया और उपयुक्त तरीके से व्यवहार किया गया था:

etags आर।

ctags -e आर:

वैकल्पिक रूप से -e etags मोड का मतलब है।