buildconfiguration रों उपयोग करने के लिए एक द्विआधारी (या साझा लाइब्रेरी बनाने के लिए एक तरीका है के लिए जा रहा द्वारा एक मुख्य कार्य के लिए एक निष्पादन निर्माण कर सकते हैं , मेरे मामले में) प्रत्येक निर्माण विन्यास से। उपर्युक्त उत्तर का उपयोग करके, इसका मतलब है कि सभी बिल्ड कॉन्फ़िगरेशन से प्रभावी मुख्य फ़ाइल को मैन्युअल रूप से बहिष्कृत करना है।
मैंने अपने eclipse प्रोजेक्ट पर काम करने में आसानी लाने के लिए उपरोक्त उत्तरों का उपयोग किया जो 14 बिल्ड कॉन्फ़िगरेशन के माध्यम से 14 साझा लाइब्रेरी बनाता है। हालांकि, indivdual "निर्माण से बाहर" को विन्यस्त सेटिंग काफी बोझिल था, इसलिए मैं निम्नलिखित कोड मेरा पूरा मुख्य फ़ाइल के रूप में एक preprocessor-directive पर निर्भर का उपयोग कर में परिवर्तन:
/*
*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.
*/
ध्यान दें कि यह और कुछ नहीं तो एक और शामिल नहीं है। सीपीपी फ़ाइल जिसका नाम preprocessor से लिया गया है और एक प्रतीक जो संकलक विकल्पों में सेट है। प्रतीक $ {CfgName} है और वर्तमान कॉन्फ़िगरेशन नाम द्वारा स्वचालित रूप से ग्रहण द्वारा प्रतिस्थापित किया जाएगा।
किसी को कॉन्फ़िगर करने की आवश्यकता नहीं है, जिसमें कौन सी फ़ाइल शामिल है जिसमें कॉन्फ़िगरेशन कॉन्फ़िगर किया गया है। बस प्रत्येक निर्माण में सभी $ {CfgName} .cpp फ़ाइलों को बाहर निकालें और प्रत्येक निर्माण में main.cpp शामिल करें।
पीएस: होवरक्राफ्ट के उत्तर ने मुझे एक मुख्य फ़ाइल रखने का विचार दिया जिसमें कोड स्वयं नहीं है। यदि किसी को विभिन्न प्रभावी मुख्य फ़ाइलों $ {CfgName} .cpp से साझा कोड शामिल है, तो उनके कोड पर काम करना अक्षम हो सकता है क्योंकि main.cpp में शीर्षलेख फ़ाइलें दिखाई नहीं देगी। मैंने कल तक यह किया था, लेकिन टूटी हुई इंडेक्स आदि के साथ कोड बनाए रखना एक बड़ा दर्द था।
पीपीएस: वर्तमान में यह प्रक्रिया मुख्य फ़ाइल के स्वचालित पुनर्निर्माण को तोड़ती है यदि केवल शामिल .cpp फ़ाइल बदल दी गई थी। ऐसा लगता है कि ग्रहण $ {CfgName} .cpp में परिवर्तनों को पहचानता नहीं है (जिसे निर्माण से बाहर रखा गया है)। तो हर बदलाव के बाद एक मैनुअल पुनर्निर्माण की आवश्यकता है। यह वर्तमान में मुझे परेशान कर रहा है;)
आपको अपने मेकफ़ाइल को और अधिक बनाए रखने के तरीके के बारे में एक अलग प्रश्न पूछने पर विचार करना चाहिए, यदि यह एक मृत अंत –
है तो मैं ज़ैक द्वारा व्यक्त विचार को दूसरा स्थान देता हूं। आपका मेकफ़ाइल अनजान क्यों है? कई, कई बड़ी और जटिल सॉफ्टवेयर परियोजनाएं तेजी से बदलते कोडबेस पर मेकफ़ाइल का सफलतापूर्वक उपयोग करती हैं। –