2012-02-21 14 views
7

के लिए ईडीई प्रोजेक्ट कैसे बनाएं I C++ (emacs24 + buildin CEDET) के लिए एक ईडीई प्रोजेक्ट सेट अप करने का प्रयास कर रहे हैं और मुझे बेताब होना शुरू हो रहा है क्योंकि मुझे ऐसा लगता है कि मैं जिस तरह से चाहता हूं बनाने के लिए मेकफ़ाइल। मैं Emacs के लिए अपेक्षाकृत नया हूँ। मैं मैं क्या कर रहा हूँ का वर्णन करने की कोशिश करेंगे:सी ++

मैं एक खिलौना परियोजना इतनी तरह की स्थापना की है:

main.cpp 
other/ 
    Utils.cpp 
    Utils.h 
    CGrabBuffer.cpp 
    CGrabBuffer.h 

main.cpp "अन्य /" निर्देशिका के अंदर दोनों ज के भी शामिल है। ये कदम हैं मैं इस सरल निर्देशिका सेटअप के साथ एक EDE परियोजना स्थापित करने का पालन करें: Emacs में

  • ओपन main.cpp और M-x ede-new करते हैं; टाइप करें: Make; नाम: main-proj
  • "अन्य" निर्देशिका में फ़ाइलों में से एक खोलें और M-x ede-new करें; टाइप करें: Make; नाम: aux-proj
  • अब यह लक्ष्य (जो मेरा मानना ​​है कि इस मामले में तीन हैं) बनाने के लिए समय आ गया है:
    • main.cpp बफर पर: M-x ede-new-target; नाम: main; टाइप करें: program। संकेत मिलने पर, मैं इस लक्ष्य में main.cpp जोड़ता हूं।
    • मैं दो अन्य लक्ष्यों के लिए दोहराता हूं (जिनके पास Utils.cpp और Utils.h और CGrabBuffer है जिसमें CGrabBuffer.cpp और CGrabBuffer.h है)। यहां मुझे पहली समस्या मिलती है। इन दो लक्ष्यों को किस प्रकार करना है? मैं केवल उन्हें .o फाइलें उत्पन्न करना चाहता हूं।
  • एक बार ऐसा हो रहा है, मैं सभी तीन लक्ष्यों को M-x ede-customize-current-target टाइप करें और मैं जोड़ने के कुछ रास्ते हैं, कुछ पुस्तकालयों, आदि
  • इस के बाद शामिल है, अगर मैं M-x ede-compile-project फोन यह संकलन नहीं करता है:
    • यह पहले main.cpp संकलित करने का प्रयास करता है; मुझे नहीं पता कि कैसे (EDE का उपयोग करके) निर्दिष्ट करना है कि main.cpp बनाने के प्रयास से पहले Utils.o और CGrabBuffer.o दोनों की आवश्यकता है।
    • यदि मैं मैन्युअल रूप से ऑर्डर (मेकफ़ाइल संपादित करना) बदलता हूं, तो यह main.cpp को लिंक करने में सक्षम नहीं है क्योंकि यह Utils.o और CGrabBuffer.o नहीं ढूंढ सकता है।

आप देख सकते हैं, मैं एक महान गंदगी के बीच में हूँ। शायद मैं यह भी समझ नहीं रहा कि ईडीई में "लक्ष्य" का क्या अर्थ है। मैंने ede-cpp-root-project के अस्तित्व के बारे में भी पढ़ा है जिसे .emacs फ़ाइल के अंदर निर्दिष्ट किया जाना है। मैंने कोशिश नहीं की है क्योंकि मुझे लगता है कि यह क्या करता है केवल अर्थशास्त्र के साथ मदद करता है। यह मेकफ़ाइल उत्पन्न नहीं करता है, है ना? क्या मेरे पास प्रोजेक्ट.एल्स के साथ निर्मित ईडीई प्रोजेक्ट (या मुझे आवश्यकता है) और इसी बात को अर्थशास्त्र के लिए ede-cpp-root-project का उपयोग कर सकते हैं? या यह अनावश्यक है?

क्षमा करें अगर मैंने बहुत सी चीजों को गलत समझा लेकिन मैं बहुत उलझन में हूं और emacs के लिए नया होने से चीज़ें और भी खराब हो जाती हैं। आपके धैर्य के लिए धन्यवाद!

संपादित करें: कुछ टिंकरिंग और प्रतिक्रियाओं के साथ मुझे बहुत सारी चीज़ें पता लगाने में सक्षम रहा है, इसलिए बहुत बहुत धन्यवाद। जो मुझे अभी भी समझ में नहीं आता है वह ede-cpp-root-project का उपयोग है जिसे .emacs फ़ाइल के अंदर निर्दिष्ट किया जाना है। क्या यह सिर्फ सी ++ अर्थशास्त्र के लिए है? प्रोजेक्ट.एल्स के साथ प्रोजेक्ट रखने के लिए अनावश्यक है और यह भी .emacs में elisp लाइनें हैं?

+1

मैं CEDET का उपयोग कर रहा हूं लेकिन मेरे जीवन के लिए इसके प्रोजेक्ट समर्थन को नहीं समझ सकता। मैं सिर्फ बाहरी मेकफ़ाइल का उपयोग करता हूं और उस के शीर्ष पर प्रोजेक्ट प्रकार "सरल" जोड़ता हूं। –

+0

हाँ, और यह एकमात्र चीज है जो मुझे अन्य आईडीई जैसे ईक्लीप्स के साथ चिपक जाती है जो आपको इन सभी चीजों को आसान तरीके से प्रबंधित करने देती है ... – pparescasellas

+0

शानदार सवाल। मैंने पिछले कुछ दिनों में इस तरह की चीज को काम करने की कोशिश करने में बिताया है, लेकिन जब मुझे लगता है कि मुझे कहीं मिल रहा है, तो यह सब टूट जाता है। यह कहकर कि ईडीई खराब दस्तावेज है, एक अल्पमत है। – Mike

उत्तर

7

ईडीई कई अलग-अलग प्रकार की परियोजनाओं को संभालने के लिए डिज़ाइन किया गया है, आमतौर पर एक प्रकार के जहां निर्माण प्रणाली किसी अन्य उपकरण में Emacs के बाहर लिखी गई थी।

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

मैंने हाल ही में ईडीई मैनुअल में एक अनुभाग जोड़ा है जो मूल परियोजना सेटअप के साथ मदद करता है जो स्वत: फ़ाइलों को स्वत: उत्पन्न करता है। आप यहाँ ट्यूटोरियल की जाँच कर सकते हैं:

http://www.randomsample.de/cedetdocs/ede/ede/Quick-Start.html

समान चरणों परियोजनाओं है कि बस के बजाय का उपयोग करते हैं, लेकिन अतिरिक्त जटिलता के कारण आधारित परियोजनाओं बनाओ आमतौर पर साझा पुस्तकालयों के साथ परेशानी है के लिए लागू होगी।

माइक का जवाब काफी अच्छा है, लेकिन मुझे लगता है कि आपके .cpp स्रोतों के समान लक्ष्य में .h फ़ाइलों को जोड़ना ठीक है। यह अलग से उनका ट्रैक रखेगा।

एक और उपयोगी चाल पूरे प्रोजेक्ट संकलन कीस्ट्रोक (सी-सी। सी) का उपयोग करना है जो कि जब भी आप कुछ बड़ा बदलते हैं तो पूंजी सी का उपयोग करती है। यह मेकफ़ाइल को पुन: उत्पन्न करेगा, किसी भी आवश्यक ऑटोमैक सुविधाओं को दोबारा शुरू करेगा, और शीर्ष पर शुरू होगा।

EDIT: आपको केवल एक परियोजना क्षेत्र के लिए एक ईडीई परियोजना की आवश्यकता है। Ede-cpp-root प्रोजेक्ट उपयोगी है जब कोई अन्य स्वचालित प्रोजेक्ट प्रकार काम नहीं करता है। यही वह समय है जब आप इसे अपनी .emacs फ़ाइल में बनाते हैं ताकि अन्य टूल जिन्हें परियोजना परिभाषा की आवश्यकता हो, जैसे अर्थपूर्ण स्मार्ट पूर्णता और टैग लुकअप, काम करेंगे।

+1

वह ट्यूटोरियल मैं कुछ हफ्ते पहले देख रहा था, जब मैंने ईडीई पर पहला नजर डालना शुरू किया, लेकिन मुझे ऐसा कुछ नहीं मिला। यह बहुत उपयोगी है और नए उपयोगकर्ता वहां जानकारी से प्यार करने जा रहे हैं, इसलिए बहुत बहुत धन्यवाद :) – pparescasellas

+0

एरिक, उस ट्यूटोरियल से क्या गुम है, वास्तव में 'ede-cpp-root-project' प्रकार का उपयोग करने का कोई विवरण है। जब तक आप मैन्युअल के उस हिस्से तक पहुंच जाते हैं, तो आप गैर-उपयोगकर्ता-केंद्रित चीजें जैसे ईयोयो सबक्लास, आदि देख रहे हैं। उदाहरण के लिए, क्या कोई प्रोजेक्ट फ़ाइल सेट करता है? आप वास्तव में उस प्रोजेक्ट प्रकार के साथ चीजों को कैसे सेट करते हैं? –

+1

लिंक टूटा हुआ है और इसे http://www.randomsample.de/cedetdocs/ede/Quick-Start.html पर अपडेट किया जाना चाहिए, मैंने संपादित करने की कोशिश की लेकिन संपादन के बारे में एक मूर्ख नियम है जो 6 वर्णों से अधिक होने की आवश्यकता है। – nispio

3

ठीक है, मुझे लगता है कि मैंने वास्तव में इस बार यह पता लगाया है, लेकिन यह बदसूरत है।Utils.cpp और CGrabBuffer.cpp को अपने स्वयं के व्यक्तिगत लक्ष्य नहीं मिलना चाहिए, क्योंकि ऐसा कोई उचित लक्ष्य प्रकार प्रतीत नहीं होता है। इसके बजाय, आपको एक संग्रह या लाइब्रेरी बनाना होगा, जो स्वचालित रूप से आपके लिए Utils.cpp और CGrabBuffer.cpp संकलित करेगा। नीचे, मुझे लगता है कि आप स्थिर चाहते हैं, लेकिन यह बदलना आसान है।

[किसी भी व्यक्ति के लिए अभिलेखागार या पुस्तकालय परिचित नहीं हैं, वे मूल रूप से .o फ़ाइलों को एक अलग इकाई में इकट्ठा करते हैं। यह वास्तव में संकलन कठिन नहीं बनाता है। और पढ़ें here।]

1) ऊपर दिए गए पहले ढाई कदमों का पालन करें (main लक्ष्य बनाने सहित, लेकिन अन्य लक्ष्य नहीं)।

2) Utils.cpp पर स्विच करें और M-x ede-new-target करें; नाम: aux; टाइप करें: archive। संकेत मिलने पर, इस लक्ष्य में Utils.cpp जोड़ें।

3) CGrabBuffer.cpp पर स्विच करें और C-c . a करें; लक्ष्य: aux

4) मेकफ़ाइल को M-x ede-proj-regenerate के साथ पुन: उत्पन्न करें। इस बिंदु पर, यदि आप other उपनिर्देशिका में make चलाते हैं, तो आपको संग्रह libaux.a प्राप्त करना चाहिए।

5) main.cpp पर वापस स्विच करें और M-x ede-customize-current-target करें। यह एक इंटरैक्टिव emacs अनुकूलन बफर लाता है, जो आपको ede कॉन्फ़िगरेशन के विवरण संपादित करने की अनुमति देता है। Ldflags अनुभाग के तहत, [INS] पर क्लिक करें। यह Link Flag: कहता है और आपके लिए टाइप करने के लिए कुछ अलग रंगीन बॉक्स है (मेरा भूरा है) यह एक नई लाइन पॉप आउट करता है। -Lother -laux टाइप करें, ताकि main संकलित करते समय other/libaux.a शामिल किया गया हो। फिर, बफर के शीर्ष पर, [Accept] दबाएं, जो उस परिवर्तन को सहेजना चाहिए और main.cpp पर वापस स्विच करना चाहिए।

6) मेकफ़ाइल को M-x ede-proj-regenerate के साथ पुन: उत्पन्न करें।

अब, दुर्भाग्य से, मेकफ़ाइल main पहले लक्ष्य बनाता है, फिर other निर्देशिका में उतरता है और बनाता है। दुर्भाग्य से, इसका मतलब है कि शीर्ष-स्तरीय निर्देशिका से एक बनाना एक साफ पेड़ पर काम नहीं करेगा। मुझे नहीं पता कि यह क्यों है, क्योंकि ऐसा लगता है कि ईडीई के साथ कभी भी बनाई गई किसी भी परियोजना में आप जो भी चाहते हैं वह कभी नहीं होगा। मुझे यह बदलने के लिए कोई रास्ता नहीं मिल रहा है, इस हैक को छोड़कर:

7) M-x customize-project करें; Inference-Rules के तहत [INS] पर क्लिक करें। फिर लक्ष्य दर्ज करें: all; निर्भरता: aux main; नियम: [INS]; स्ट्रिंग @:। (यह आखिरी वाला सिर्फ एक टैब के साथ खाली नियम पर त्रुटि को रोकने के लिए है; संभवतः एक ईडीई बग।) [Accept] पर क्लिक करें, और मेकफ़ाइल पुन: उत्पन्न करें।

तो अब, अपनी शीर्ष निर्देशिका में, आप केवल रन बना सकते हैं, और main कार्य निष्पादन योग्य होना चाहिए।

मैं जल्दी से आश्वस्त हो रहा हूं कि ईडीई अभी तक इसके लेखकों के अलावा अन्य लोगों द्वारा उपयोग करने के लिए तैयार नहीं है। इसके आकार और प्रयासों की मात्रा के बावजूद उन्होंने स्पष्ट रूप से इसमें डाल दिया है, यह बहुत छोटी है, बहुत उलझन में है, और पर्याप्त स्मार्ट नहीं है। कि एक शर्म की बात है। Emacs इस तरह कुछ चाहिए।

+0

प्रश्न पूछने के बाद मैंने प्रोजेक्ट प्रकारों के साथ झुकाव जारी रखा और मैंने जो कुछ कहा, उसके समान कुछ करने लगा। मैंने एक के बजाय टाइप आर्काइव के दो लक्ष्य (CGRBuffer के लिए एक और दूसरे के लिए) बनाया। और, जैसा कि आप कहते हैं, मुझे पहले 'अन्य' निर्देशिका पर 'मेक' कॉल करना पड़ा था। कार्यवाही का यह तरीका "अजीब" लगता है लेकिन यह काम करता है :)। – pparescasellas

+0

एरिक का नया ट्यूटोरियल निश्चित रूप से वास्तव में सहायक है। विशेष रूप से, ऐसा लगता है कि ऑटोमैक का उपयोग करने से इन समस्याओं में से कई हल हो जाएंगे। उस ने कहा, मुझे एहसास हुआ कि आप 'अन्य' Utils.cpp' और 'अन्य/CGrabBuffer.cpp' को 'मुख्य' लक्ष्य में स्रोतों के रूप में भी शामिल कर सकते हैं, और वे सही तरीके से बनाए जाएंगे। आपको उनके लिए अलग-अलग लक्ष्यों की भी आवश्यकता नहीं है। – Mike