Emacs के लिए टैग: etags, ebrowse, cscope, जीएनयू ग्लोबल और उत्साही ctags के बीच संबंध




cedet gnu-global (4)

टैग फ़ाइलों में परिभाषाएं होती हैं

एक TAGS फ़ाइल में एक सूची होती है जहां फ़ंक्शंस और कक्षाएं परिभाषित की जाती हैं। यह आमतौर पर एक परियोजना की जड़ में रखा जाता है और ऐसा लगता है:

^L
configure,3945
as_fn_success () { as_fn_return 0; }^?as_fn_success^A180,5465
as_fn_failure () { as_fn_return 1; }^?as_fn_failure^A181,5502
as_fn_ret_success () { return 0; }^?as_fn_ret_success^A182,5539
as_fn_ret_failure () { return 1; }^?as_fn_ret_failure^A183,5574

यह Emacs परिभाषाओं को खोजने में सक्षम बनाता है। मूल नेविगेशन अंतर्निहित find-tag साथ बनाया गया है, लेकिन कई मैचों में etags-select एक अच्छा यूआई प्रदान करता है।

आप कोड पूर्ण करने के लिए TAGS फ़ाइलों का भी उपयोग कर सकते हैं। उदाहरण के लिए, कंपनी के ईटैग बैकएंड TAGS फ़ाइलों का उपयोग करता है

टैग फ़ाइलों को विभिन्न उपकरणों द्वारा बनाया जा सकता है

ctags (जिसे पहले 'सार्वभौमिक ctags' या 'exuberant ctags' के रूप में जाना जाता है) TAGS फ़ाइलों को उत्पन्न कर सकते हैं और भाषाओं की विस्तृत श्रृंखला का समर्थन कर सकते हैं। यह गिटूब पर सक्रिय रूप से बनाए रखा जाता है।

Emacs दो प्रोग्रामों के साथ जहाजों जो टैग्स जेनरेट करता है, जिसे etags और etags कहा जाता है। Emacs ' ctags सार्वभौमिक ctags के रूप में एक ही सीएलआई इंटरफ़ेस के साथ बस etags । भ्रम से बचने के लिए, कई ctags.emacs24 इन प्रोग्रामों का नाम बदलते हैं (उदाहरण के लिए डेबियन पर ctags.emacs24 )।

TAGS फ़ाइलों को उत्पन्न करने के लिए भाषा विशिष्ट टूल भी हैं, जैसे कि jsctags और hasktags

अन्य फ़ाइल प्रारूप

ebrowse एक सी प्रोग्राम Emacs के साथ भेज दिया गया है। यह सी / सी ++ कोड अनुक्रमणित करता है और एक BROWSE फ़ाइल उत्पन्न करता है। ebrowse.el सामान्य खोज परिभाषा और समापन प्रदान करता है। आप कोडबस को परिभाषित कक्षाओं / फ़ंक्शन का अवलोकन प्राप्त करने के लिए सीधे Emacs में BROWSE फ़ाइल भी खोल सकते हैं।

जीएनयू ग्लोबल का अपना डेटाबेस प्रारूप है, जिसमें एक GTAGS , GRTAGS और GPATH फ़ाइल शामिल है। आप gtags कमांड के साथ इन फ़ाइलों को उत्पन्न कर सकते हैं, जो सी / सी ++ कोड को gtags । अन्य भाषाओं के लिए, जीएनयू ग्लोबल सार्वभौमिक ctags द्वारा उत्पन्न फ़ाइलों को पढ़ सकते हैं।

जीएनयू ग्लोबल भी अधिक परिष्कृत प्रश्न पूछने के लिए एक सीएलआई इंटरफेस प्रदान करता है, जैसे 'इस प्रतीक का उल्लेख कहां है?'। यह एक Emacs पैकेज gtags.el के साथ जहाज है, लेकिन ggtags.el भी जीएनयू ग्लोबल डेटाबेस तक पहुंचने के लिए लोकप्रिय है।

cscope जीएनयू ग्लोबल के लिए भावना में समान है: यह सी / सी ++ को अपने डेटाबेस प्रारूप में पार्स करता है। यह 'इस funciton के सभी कॉलर्स / कॉलिल्स' जैसे प्रश्नों का भी उत्तर दे सकता है।

वैश्विक और सीएससीओपी की तुलना में यह एचएन चर्चा भी देखें।

ग्राहक / सर्वर परियोजनाओं

एक सतत सर्वर का उपयोग कर rtags सी / सी ++। यह क्लैंग पार्सर का उपयोग करता है, इसलिए यह वास्तव में अच्छी तरह से C ++ को संभालता है। यह सर्वर से पूछताछ के लिए एक Emacs पैकेज के साथ जहाज।

google-gtags एक प्रोजेक्ट था जहां सर्वर पर एक बड़ी TAGS फ़ाइल संग्रहीत की जाएगी। जब आपने सर्वर से पूछताछ की, तो वह TAGS फ़ाइल का एक सबसेट प्रदान करेगा जो आपकी खोज के लिए प्रासंगिक था।

अर्थपूर्ण (CEDET)

अर्थपूर्ण एक अंतर्निहित Emacs पैकेज है जिसमें सी / सी ++ के लिए एक पार्सर है, इसलिए यह परिभाषा भी पा सकता है। यह टैग्स फ़ाइलों, सीएसओपी डेटाबेस, और अन्य स्रोतों से भी डेटा आयात कर सकता है। सीईडीईटी में आईडीई शैली की कार्यक्षमता भी शामिल है जो इस डेटा का उपयोग करती है, उदाहरण के लिए श्रेणी पदानुक्रमों के यूएमएल आरेखों को उत्पन्न करना।

मैं सी ++ परियोजनाओं पर काम करता हूं, और मैं सीडीईटी और स्टैक ओवरफ्लो में टैग के बारे में अन्य धागे के लिए एलेक्स ओट की मार्गदर्शिका से गुजरता हूं, लेकिन मैं अभी भी इस बारे में उलझन में हूं कि कैसे एएमएसी स्वत: पूर्णता, परिभाषाओं की तलाश, स्रोत के नेविगेशन की सुविधा के लिए इन विभिन्न टैग सिस्टम के साथ इंटरफेस करता है। कोड बेस या डॉक्टर-स्ट्रिंग का पूर्वावलोकन।

  1. etags , ebrowse , cscope , cscope , GNU Global और GTags बीच अंतर क्या है (उदाहरण के लिए सुविधाओं के संदर्भ में)? Emacs में उनका उपयोग करने के लिए मुझे क्या करने की ज़रूरत है?

  2. क्या मुझे अर्थात् / सीनेटर (CEDET) की आवश्यकता है यदि मैं नेविगेट / स्वतः पूर्ण प्रतीकों के लिए टैग का उपयोग करना चाहता हूं?

  3. इन अलग-अलग टैग उपयोगिताओं के शीर्ष पर अर्थपूर्ण अर्थ तालिका में क्या लाता है? इन उपकरणों के साथ यह कैसे इंटरफेस करता है?


मैं 1 में कुछ स्पष्टीकरण जोड़ने की कोशिश करूंगा।

यह क्या है?

  • Etags 'TAGS' फ़ाइल उत्पन्न करने का आदेश है जो Emacs के लिए टैग फ़ाइल है। आप etags.el के साथ फ़ाइल का उपयोग कर सकते हैं जो emacs पैकेज का हिस्सा है।
  • Ctags 'टैग' फ़ाइल उत्पन्न करने का एक आदेश है जो vi के लिए टैग फ़ाइल है। अब एक्सबेरेंट सीटीएजी -ई विकल्प द्वारा 'टैग्स' फ़ाइल उत्पन्न कर सकते हैं, और 41 प्रोग्रामिंग भाषाओं का समर्थन कर सकते हैं।
  • सीस्कोप सी भाषा के लिए एक ऑल-इन-वन स्रोत कोड ब्राउज़िंग टूल है। इसमें स्वयं का सीयूआई (चरित्र उपयोगकर्ता इंटरफ़ेस) और टैग डेटाबेस (cscope.in.out, cscope.out, cscope.po.out) है। आप xcscope.el का उपयोग कर Emacs से cscope का उपयोग कर सकते हैं जो किस्कोप पैकेज का हिस्सा है।
  • जीएनयू ग्लोबल एक स्रोत कोड टैगिंग सिस्टम है। हालांकि यह उपर्युक्त उपकरणों के समान है, लेकिन यह उन बिंदुओं से अलग है, यह किसी भी संपादक से निर्भर है, और इसमें कमांड लाइन को छोड़कर कोई उपयोगकर्ता इंटरफ़ेस नहीं है। Gtags GLOBAL (GTAGS, GRTAGS, GPATH) के लिए टैग फ़ाइलों को उत्पन्न करने का आदेश है। आप gtags.el का उपयोग कर Emacs से ग्लोबल का उपयोग कर सकते हैं जो ग्लोबल पैकेज का हिस्सा है। इसके अलावा, इसके लिए कई elisp पुस्तकालय हैं (xgtags.el, ggtags.el, कुछ भी- gtags.el, helm-gtags.el, आदि)।

तुलना

  • सीटीएजी और एटैग केवल परिभाषाओं का इलाज करते हैं। सेस्कोप और जीएनयू ग्लोबल न केवल परिभाषाओं बल्कि संदर्भों का भी इलाज करते हैं।
  • Ctags और etags एक फ्लैट पाठ टैग फ़ाइल का उपयोग करें। सेस्कोप और जीएनयू ग्लोबल कुंजी-मूल्य टैग डेटाबेस का उपयोग करें।
  • सेस्कोप और जीएनयू ग्लोबल में खोज इंजन की तरह एक grep है और टैग फ़ाइलों की वृद्धिशील अद्यतन सुविधा है।

मेल

आप ग्लोबल के प्लग-इन पार्सर के रूप में ctags का उपयोग करके एक्सबेरेंट सीटैग के समृद्ध भाषा समर्थन और जीएनयू ग्लोबल की डेटाबेस सुविधा को जोड़ सकते हैं।

अनुवर्ती आज़माएं: (ग्लोबल-6.0, एक्सबेरेंट सीटैग-5.5 या बाद में क्रमशः आवश्यक)

जीएनयू ग्लोबल बिल्डिंग:

$ ./configure --with-exuberant-ctags=/usr/local/bin/ctags
$ sudo make install

उपयोग:

$ export GTAGSCONF=/usr/local/share/gtags/gtags.conf
$ export GTAGSLABEL=ctags
$ gtags                     # invokes Exuberant Ctags internally
$ emacs -f gtags-mode       # load gtags.el

(हालांकि, आप इस विधि से संदर्भों का इलाज नहीं कर सकते हैं, क्योंकि ctags संदर्भों का इलाज नहीं करते हैं।)

आप जीएनयू ग्लोबल के ग्राहक के रूप में सीएसकोप का भी उपयोग कर सकते हैं। ग्लोबल पैकेज में 'gtags-cscope' नामक एक कमांड शामिल है जो किस्कोप का एक बंदरगाह है, यानी यह स्वयं कोस्कोप है, सिवाय इसके कि यह ग्लोबल को एकस्कोप के बजाय खोज इंजन के रूप में उपयोग करता है।

$ gtags-cscope          # this is GLOBAL version of cscope

संयोजनों के साथ, आप 41 भाषाओं के लिए सीएससीओपी का उपयोग कर सकते हैं।

सौभाग्य!


यह एक अच्छा सवाल है जैसा कि मैंने हाल ही में यहां पढ़ा है, इसलिए मैं अधिक विस्तार से अंतर को समझाने की कोशिश करूंगा:

प्वाइंट 1:

etags और etags दोनों स्रोत फ़ाइलों में पाए जाने वाली भाषा वस्तुओं की एक इंडेक्स (उर्फ टैग / टैग्स) फ़ाइल उत्पन्न करते हैं जो इन आइटम्स को टेक्स्ट एडिटर या अन्य उपयोगिता द्वारा तेज़ी से और आसानी से स्थित करने की अनुमति देता है। एक टैग एक भाषा वस्तु को इंगित करता है जिसके लिए एक इंडेक्स प्रविष्टि उपलब्ध है (या, वैकल्पिक रूप से, उस ऑब्जेक्ट के लिए बनाई गई इंडेक्स प्रविष्टि)। सीटीएजी द्वारा उत्पन्न टैग मेटाडेटा के मामले में समृद्ध हैं, लेकिन Emacs अतिरिक्त डेटा को किसी भी तरह से समझ नहीं सकते हैं, इसलिए आपको उन्हें कम या ज्यादा मानना ​​चाहिए ( ctags का मुख्य लाभ अधिक भाषाओं के लिए इसका समर्थन होगा)। टैग फ़ाइलों के लिए प्राथमिक उपयोग वर्ग / विधि / फ़ंक्शन / स्थिर / आदि घोषणा / परिभाषाओं को देख रहा है।

cscope अधिक शक्तिशाली जानवर है (कम से कम जहां तक ​​सी / सी ++ और जावा चिंतित हैं)। हालांकि यह एक ही सिद्धांत (उपयोगी मेटाडाटा की एक फाइल उत्पन्न करने) पर कम या कम संचालित करता है, यह आपको कुछ प्रशंसक चीजों को करने की अनुमति देता है जैसे कि प्रतीक के सभी संदर्भ मिलते हैं, देखें कि कोई फ़ंक्शन कहां लगाया जा रहा है, आदि (आप परिभाषाएं भी पा सकते हैं) ।

इसका सारांश प्रस्तुत करना:

ctags एक आपको प्रतीक घोषणा / परिभाषाओं पर नेविगेट करने की अनुमति देता है (कुछ लोग एक-तरफा लुकअप कहेंगे)। ctags एक सामान्य उद्देश्य उपकरण है जो कई भाषाओं के लिए उपयोगी है।

दूसरी तरफ (जैसा कि प्रोजेक्ट के पेज पर बताया गया है) cscope आपको ये करने की अनुमति देता है:

  • एक प्रतीक की घोषणा पर जाएं
  • एक प्रतीक के सभी संदर्भों की एक चयन योग्य सूची दिखाएं
  • किसी भी वैश्विक परिभाषा के लिए खोजें
  • फ़ंक्शन द्वारा बुलाए गए फ़ंक्शंस
  • फ़ंक्शंस को फ़ंक्शन कॉल करना
  • एक पाठ स्ट्रिंग के लिए खोजें
  • एक नियमित अभिव्यक्ति पैटर्न के लिए खोजें
  • एक फाइल खोजें
  • फ़ाइल सहित सभी फाइलें खोजें

इस बिंदु पर किसी को भी कोई आश्चर्य नहीं होना चाहिए, कि जब मैं सी / सी ++ परियोजनाओं से cscope हूं तो मैं cscope का भारी उपयोग करता cscope और cscope बारे में बहुत कम ख्याल रखता cscope । अन्य भाषाओं से निपटने पर स्थिति स्पष्ट रूप से उलट दी जाएगी।

प्वाइंट 2।

बुद्धिमान स्वत: पूर्ण करने के लिए आपको एक सच्चे स्रोत कोड पार्सर (अर्थात् जैसे) की आवश्यकता होती है, अन्यथा आप अपने अनुप्रयोगों में ऑब्जेक्ट्स के प्रकार (उदाहरण के लिए) और उन तरीकों को नहीं बुला सकते हैं जिन्हें उन पर बुलाया जा सकता है। आप कई अलग-अलग स्रोतों के आधार पर स्वत: पूर्णता प्राप्त कर सकते हैं, लेकिन सर्वोत्तम परिणाम प्राप्त करने के लिए आपको अंततः एक पार्सर की आवश्यकता होगी। सिंटैक्स हाइलाइटिंग के लिए ही चला जाता है - वर्तमान में Emacs प्रमुख मोड में सिंटैक्स हाइलाइटिंग नियमित अभिव्यक्तियों पर आधारित है और यह बहुत नाजुक और त्रुटि प्रवण है। उम्मीद है कि Emacs 23.2 में अर्थपूर्ण शामिल करने के साथ (यह इससे पहले एक बाहरी पैकेज होता था) हम इसके लिए अधिक उपयोग देखना शुरू कर देंगे (जैसे इसे बफर स्रोत कोड का विश्लेषण करने के लिए इसका उपयोग करना ठीक से हाइलाइट करने के लिए)

चूंकि Emacs 24.1 अर्थात् Emacs पूर्णता ढांचे से उपयोग करने योग्य है। इसका परीक्षण करने का सबसे आसान तरीका सी स्रोत कोड फ़ाइल खोलना और एम-टैब या सीएमआई टाइप करना और आपके लिए स्वैच्छिक रूप से पूर्ण रूप से पूर्ण होना है। उन भाषाओं के लिए जहां डिफ़ॉल्ट रूप से अर्थपूर्ण सक्षम नहीं है, आप इसे अपने मुख्य मोड हुक में निम्न पंक्ति जोड़ सकते हैं:

(add-to-list 'completion-at-point-functions 'semantic-completion-at-point-function)

प्वाइंट 3।

अर्थपूर्ण सच कोड जागरूकता लाता है (कुछ भाषाओं के लिए जो वर्तमान में इसका समर्थन करता है) और आईडीई और एमएक्स के बीच के अंतर को बंद कर देता है। यह वास्तव में etags और cscope जैसे उपकरणों के साथ इंटरफ़ेस नहीं करता है, लेकिन इसका मतलब यह नहीं है कि आप उन्हें एक साथ उपयोग नहीं कर सकते हैं।

उम्मीद है कि मेरी व्याख्याएं समझ में आती हैं और आपके लिए उपयोगी होंगी।

पीएस मैं global और ebrowse से काफी परिचित नहीं ebrowse , लेकिन अगर स्मृति मेरी सेवा करती है तो उन्होंने ईटैग का उपयोग किया।


[उत्तर shigio से अद्यतन]

मैं प्रश्न के भाग 1 में कुछ स्पष्टीकरण जोड़ने की कोशिश करूंगा।

यह क्या है?

  1. Etags एक TAGS फ़ाइल उत्पन्न करता है जो Emacs के लिए टैग फ़ाइल प्रारूप है । आप etags.el के साथ एक Etags फ़ाइल का उपयोग कर सकते हैं जो Emacs का हिस्सा है।
  2. Ctags किसी भी चीज़ के लिए सामान्य शब्द है जो tags फ़ाइल उत्पन्न कर सकता है, जो Vi के लिए मूल टैग फ़ाइल प्रारूप है। ctags (उर्फ UCtags , पूर्व में एक्सबेरेंट सीटैग) भी विकल्प के साथ एटैग उत्पन्न कर सकते हैं।
  3. Cscope अपने स्वयं के टैग डेटाबेस ( cscope.in.out , cscope.out , cscope.po.out ) और TUI साथ सी (सी ++ और जावा के लिए कम समर्थन के साथ) के लिए एक ऑल-इन-वन स्रोत कोड ब्राउज़िंग टूल है। सीस्कोप समर्थन विम में अंतर्निहित है; आप xcscope.el पैकेज का उपयोग कर Emacs से Cscope का उपयोग कर सकते हैं। सीस्कोप आधारित जीयूआई भी हैं।
  4. जीएनयू ग्लोबल (उर्फ Gtags ) अभी तक एक और स्रोत कोड टैगिंग सिस्टम है (महत्वपूर्ण अंतर के साथ - अगला अनुभाग देखें), जिसमें यह टैग फ़ाइलों को भी उत्पन्न करता है।

तुलना

  • Ctags और Etags केवल परिभाषाओं का इलाज (उदाहरण के लिए, चर और कार्यों)। सेस्कोप और जीटैग भी संदर्भों का इलाज करते हैं।
  • सीटीएजी और एटैग टैग फाइलें flat । सेस्कोप और जीटीएजी टैगफाइल अधिक शक्तिशाली कुंजी-मूल्य डेटाबेस हैं , जो (उदाहरण) वृद्धिशील अद्यतन की अनुमति देता है।
  • Cscope और Gtags एक grep -like खोज इंजन है।
  • सीटीएजीएस में अधिक भाषाओं और डेटा प्रारूपों के लिए अंतर्निहित समर्थन है: यूनिवर्सल सीटैग पार्सर्स की वर्तमान-इन-रिपोजिटरी सूची देखें । यूसीटैग ने भी दस्तावेज किया है कि कैसे अपना खुद का पार्सर विकसित करना है
  • सेस्कोप और जीटीएजी संपादक-स्वतंत्र हैं।
  • Gtags अपने स्वयं के यूजर इंटरफेस प्रदान नहीं करता है, लेकिन वर्तमान में (अक्टूबर 2016) कमांडलाइन (सीएलआई), एमैक्स और रिश्तेदारों, वी और रिश्तेदारों, less (पेजर), Doxygen और किसी भी वेब ब्राउज़र से उपयोग किया जा सकता है।
  • Gtags GLOBAL पैकेज के माध्यम से gtags.el प्रदान करता है, लेकिन xgtags.el, ggtags.el, any-gtags.el, helm-gtags.el सहित कई अन्य elisp एक्सटेंशन भी हैं।

मेल

आप ग्लोबल प्लग-इन पार्सर के रूप में Ctags का उपयोग करके Gtags 'डेटाबेस सुविधा और कई एक्सटेंशन के साथ यूनिवर्सल सीटैग के समृद्ध भाषा समर्थन को जोड़ सकते हैं:

# build GNU GLOBAL
./configure --with-exuberant-ctags=/usr/local/bin/ctags
sudo make install

# use it
export GTAGSCONF=/usr/local/share/gtags/gtags.conf
export GTAGSLABEL=ctags
gtags                     # invokes Universal Ctags internally
emacs -f gtags-mode       # load gtags.el

फिर से ध्यान दें कि यदि आप अपने जीटीएजी के लिए पार्सर के रूप में सीटीएजी का उपयोग करते हैं, तो आप संदर्भों का इलाज करने की क्षमता खो देते हैं (उदाहरण के लिए, चर उपयोग, फ़ंक्शन कॉल) जो Gtags अन्यथा प्रदान करते हैं। अनिवार्य रूप से, आप Ctags के अधिक अंतर्निहित भाषा समर्थन के लिए Gtags 'संदर्भ ट्रैकिंग का व्यापार करते हैं।

आप जीएसएक्स के क्लाइंट के रूप में सीस्कोप का भी उपयोग कर सकते हैं: gtags-cscope

सौभाग्य!