2010-03-11 13 views
17

के भीतर कई बाइनरी का निर्माण करना मैं एक परियोजना के भीतर एक समय में कई बाइनरी बनाने के लिए ग्रहण कैसे प्राप्त कर सकता हूं (हाथ से मेकफ़ाइल लिखने के बिना)?एक ग्रहण परियोजना

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

+1

आपको अपने मेकफ़ाइल को और अधिक बनाए रखने के तरीके के बारे में एक अलग प्रश्न पूछने पर विचार करना चाहिए, यदि यह एक मृत अंत –

+0

है तो मैं ज़ैक द्वारा व्यक्त विचार को दूसरा स्थान देता हूं। आपका मेकफ़ाइल अनजान क्यों है? कई, कई बड़ी और जटिल सॉफ्टवेयर परियोजनाएं तेजी से बदलते कोडबेस पर मेकफ़ाइल का सफलतापूर्वक उपयोग करती हैं। –

उत्तर

21

इसके लिए समाधान यहां वर्णित है: http://tinyguides.blogspot.ru/2013/04/multiple-binaries-in-single-eclipse-cdt.html। एक अंश है:

  1. एक प्रबंधित परियोजना (फ़ाइल> नया सी ++ प्रोजेक्ट> निष्पादन)
  2. (कई मुख्य युक्त स्रोत कोड जोड़े) में कार्य
  3. प्रोजेक्ट> गुण> C/C जाओ बनाएं ++ सामान्य> पथ & प्रतीकों> कॉन्फ़िगरेशन प्रबंधित करें
  4. प्रत्येक निष्पादन योग्य के लिए एक बिल्ड कॉन्फ़िगरेशन बनाएं और इसे उचित रूप से नाम दें (आप डीबग और रिलीज़ जैसे मौजूदा कॉन्फ़िगरेशन क्लोन कर सकते हैं)।
  5. परियोजना एक्सप्लोरर से, सही> प्रत्येक स्रोत फ़ाइल main() समारोह> संसाधन विन्यास शामिल उस पर क्लिक करें बिल्ड से बाहर निकालें और बाहर निकालने के सभी एक ही है कि इस मुख्य() फ़ंक्शन
  6. सभी के साथ निष्पादन योग्य बनाता है सिवाय विन्यास का निर्माण अन्य कोड डिफ़ॉल्ट रूप से सभी निर्माण विन्यास में शामिल किया गया है। आपको अपने आवेदन के आधार पर इसे बदलने की आवश्यकता हो सकती है।
  7. अब आप प्रोजेक्ट> विन्यास का निर्माण> सक्रिय सेट, परियोजना> निर्माण परियोजना
+3

या उन्हें 'प्रोजेक्ट> बिल्ड कॉन्फ़िगरेशन> सभी बनाएं' के माध्यम से एक बार में सभी को बनाएं –

6

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

इस के लिए कई कारण हैं:

  • समर्पित निर्माण उपयोगिताओं बहुत लचीलापन आप एक से अधिक निष्पादन लक्ष्यों को पैदा करने में तलाश कर रहे हैं प्रदान करते हैं।

  • चींटी और समर्थन सबसे अधिक कल्पनाशील मनमानी निर्माण प्रक्रिया श्रृंखला (हालांकि काफी नहीं) का समर्थन करते हैं।

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

  • सामान्य उद्देश्य, बुनियादी निर्माण उपयोगिताओं हैं आमतौर पर कमांड लाइन आधारित है, जो यह उन्हें और अधिक परिष्कृत के साथ एकीकृत करने के लिए आसान बनाता है, उच्च स्तर की पल्स, CruiseControl, आदि

  • तरह से स्वचालित निर्माण प्रबंधन के लिए उपयोगिताओं का निर्माण

आपके प्रश्न को प्रेरित करने की आवश्यकता आपको बता रही है कि अब एक बेहतर निर्माण उपकरण पर स्विच करने का समय है।

2

रों उपयोग करने के लिए एक द्विआधारी (या साझा लाइब्रेरी बनाने के लिए एक तरीका है के लिए जा रहा द्वारा एक मुख्य कार्य के लिए एक निष्पादन निर्माण कर सकते हैं , मेरे मामले में) प्रत्येक निर्माण विन्यास से। उपर्युक्त उत्तर का उपयोग करके, इसका मतलब है कि सभी बिल्ड कॉन्फ़िगरेशन से प्रभावी मुख्य फ़ाइल को मैन्युअल रूप से बहिष्कृत करना है।

मैंने अपने प्रोजेक्ट पर काम करने में आसानी लाने के लिए उपरोक्त उत्तरों का उपयोग किया जो 14 बिल्ड कॉन्फ़िगरेशन के माध्यम से 14 साझा लाइब्रेरी बनाता है। हालांकि, indivdual "निर्माण से बाहर" को विन्यस्त सेटिंग काफी बोझिल था, इसलिए मैं निम्नलिखित कोड मेरा पूरा मुख्य फ़ाइल के रूप में एक पर निर्भर का उपयोग कर में परिवर्तन:

/* 
*main.cpp 
*/ 
/* Within 
* Project | Properties | C/C++-Build | Settings 
* | GCC C++ Compiler | Preprocessor 
* set the following defined Symbol: 
* _FILENAME=${ConfigName} 
*/ 
#define __QUOT2__(x) #x 
#define __QUOT1__(x) __QUOT2__(x) 
#include __QUOT1__(_FILENAME.cpp) 
#undef __QUOT1__ 
#undef __QUOT2__ 
/* The above include directive will include the file ${CfgName}.cpp, 
* wherein ${CfgName} is the name of the build configuration currently 
* active in the project. 
* 
* When right clicking in 
* Project Tree | (Project) 
* and selecting 
* Build Configuration | Build all 
* this file will include the corresponding .cpp file named after the 
* build config and thereby effectively take that file as a main file. 
* 
* Remember to exclude ALL ${CfgName}.cpp files from ALL build configurations. 
*/ 

ध्यान दें कि यह और कुछ नहीं तो एक और शामिल नहीं है। सीपीपी फ़ाइल जिसका नाम से लिया गया है और एक प्रतीक जो संकलक विकल्पों में सेट है। प्रतीक $ {CfgName} है और वर्तमान कॉन्फ़िगरेशन नाम द्वारा स्वचालित रूप से ग्रहण द्वारा प्रतिस्थापित किया जाएगा।

किसी को कॉन्फ़िगर करने की आवश्यकता नहीं है, जिसमें कौन सी फ़ाइल शामिल है जिसमें कॉन्फ़िगरेशन कॉन्फ़िगर किया गया है। बस प्रत्येक निर्माण में सभी $ {CfgName} .cpp फ़ाइलों को बाहर निकालें और प्रत्येक निर्माण में main.cpp शामिल करें।

पीएस: होवरक्राफ्ट के उत्तर ने मुझे एक मुख्य फ़ाइल रखने का विचार दिया जिसमें कोड स्वयं नहीं है। यदि किसी को विभिन्न प्रभावी मुख्य फ़ाइलों $ {CfgName} .cpp से साझा कोड शामिल है, तो उनके कोड पर काम करना अक्षम हो सकता है क्योंकि main.cpp में शीर्षलेख फ़ाइलें दिखाई नहीं देगी। मैंने कल तक यह किया था, लेकिन टूटी हुई इंडेक्स आदि के साथ कोड बनाए रखना एक बड़ा दर्द था।

पीपीएस: वर्तमान में यह प्रक्रिया मुख्य फ़ाइल के स्वचालित पुनर्निर्माण को तोड़ती है यदि केवल शामिल .cpp फ़ाइल बदल दी गई थी। ऐसा लगता है कि ग्रहण $ {CfgName} .cpp में परिवर्तनों को पहचानता नहीं है (जिसे निर्माण से बाहर रखा गया है)। तो हर बदलाव के बाद एक मैनुअल पुनर्निर्माण की आवश्यकता है। यह वर्तमान में मुझे परेशान कर रहा है;)

संबंधित मुद्दे