2010-09-24 9 views
7

से शुरू करना मैं एक सी ++ प्रोजेक्ट शुरू कर रहा हूं जिसे मैं उसी रिपोजिटरी से एक्लिप्स (लिनक्स) और बनाम 2010 में समान रूप से अच्छी तरह से संकलित करना चाहता हूं और कुछ मदद शुरू करने में मदद कर सकता हूं। जबकि कई पहलू व्यक्तिगत रूप से Google'd हो सकते हैं, मैं पूरी तरह से समस्या से संपर्क करने के बारे में सलाह लेने की उम्मीद कर रहा था।एक क्रॉस प्लेटफॉर्म सी ++ प्रोजेक्ट

उदाहरण के लिए, लाइब्रेरी स्रोतों को कहां रखना है, मेक फ़ाइल को कैसे व्यवस्थित करना है, और googletest को एकीकृत कैसे करें (googletest पर एक नौसिखिया ट्यूटोरियल ढूंढना मुश्किल है)। इन पहलुओं को संबोधित करने वाले ट्यूटोरियल का एक लिंक बहुत अच्छा होगा, या ट्यूटोरियल की एक श्रृंखला जो एक साथ मदद कर सकती है।

मेरी पृष्ठभूमि सी # में है और मैं अपनी वीएस परियोजनाओं की "स्वच्छता" और संगठन को बनाए रखने की कोशिश कर रहा हूं।

+0

क्या आपका मतलब विंडोज़ पर वीएस -2010 और लिनक्स पर ग्रहण के बीच संगतता है? ग्रहण स्वयं ही एक बहुत बहु-मंच आईडीई है। – Reinderien

+0

हां, पूछने के लिए धन्यवाद। ग्रहण लिनक्स पर चल रहा है (ओपनस्यूज 11.3) – ccook

उत्तर

13

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

जब तृतीय पक्ष पुस्तकालयों की बात आती है, तो आप ठोस रूप से परीक्षण किए गए क्रॉस प्लेटफ़ॉर्म की सामग्री से चिपकना चाहेंगे। Boost सी ++ के लिए सबसे अच्छा सामान्य उद्देश्य लाइब्रेरी है (हां, आप इसे यहां लगभग हर सी ++ धागे में वर्णित देखते हैं ... लेकिन ऐसा इसलिए है क्योंकि यह वास्तव में उपयोगी सामान का एक अच्छा संग्रह है)। एक्सएमएल, HTTP, छवि libs, UI के लिए - सभी अच्छे क्रॉस प्लेटफ़ॉर्म विकल्प हैं - बस चारों ओर देखो या यहां पूछें कि क्या आपके पास विशिष्ट आवश्यकताएं हैं। आप जो कुछ भी करते हैं, कोडप्रोजेक्ट या अन्य एमएस उन्मुख साइट से कुछ लाइब्रेरी का उपयोग न करें जिसे केवल विजुअल स्टूडियो 6 के साथ परीक्षण किया गया है - जो केवल दुख का कारण बन जाएगा। अधिकांश जीएनयू libs इन दिनों खिड़कियों पर निर्माण करते हैं, तो आप उस सामान के साथ उचित रूप से सुरक्षित होना चाहिए।

हालांकि यह आकर्षक होगा, अपने कोड में प्लेटफ़ॉर्म #ifdefs को कम करने का प्रयास करें - जहां भी संभव हो, पुस्तकालय में किसी प्लेटफॉर्म विशिष्ट सामग्री को सारणीबद्ध करना पसंद करें।

गुड लक!

+0

इच्छा है कि मैं एक से अधिक अपवोट – Tim

+0

'# ifdef' बनाम अलग पुस्तकालयों के संबंध में कर सकता हूं - एक पुस्तकालय में बेस क्लास में सामान्य कोड डालना अनुचित नहीं है, फिर उसको बढ़ाएं वर्ग-विशिष्ट बाल वर्गों को अलग करने के लिए कक्षा जो बहुरूपता का उपयोग करके प्लेटफॉर्म-विशिष्ट व्यवहार को बदलती हैं। फिर केवल '# ifdef की आवश्यकता है कि किस बच्चे वर्ग का उपयोग किया जाता है। – Reinderien

+0

ifdef/अलग पुस्तकालयों के बारे में, आपके पास एक सामान्य शीर्षलेख फ़ाइल भी हो सकती है, फिर साझा सीपीपी में कुछ स्रोतों के साथ स्रोत फ़ाइलों को विभाजित करें और प्लेटफ़ॉर्म विशिष्ट फ़ाइलों में से कुछ स्रोत जो केवल उपयुक्त सिस्टम पर बने हैं। –

4

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

या, यदि आप एक्लिप्स के प्रशंसक हैं, तो बस विंडोज और जीएनयू/लिनक्स दोनों पर ग्रहण स्थापित करें। जैसा कि मैंने ऊपर बताया है, यह क्रॉस-प्लेटफॉर्म है, और आप इसे विभिन्न प्रणालियों के सभी प्रकारों पर कंपाइलर्स के लिए काम कर सकते हैं।

+0

यह आशाजनक लग रहा है, लेकिन इसे लागू करना कितना मुश्किल होगा? मैंने बस – ccook

+3

बनाने के लिए खुद को लपेट लिया है मेरी विनम्र राय में, वाक्यविन्यास बहुत हैकी बनाते हैं। यदि आप इसके इतिहास के बारे में पढ़ते हैं, तो इसका वास्तव में कभी भी सार्वजनिक, बड़े पैमाने पर निर्माण समाधान होने का इरादा नहीं था। स्केल करना मुश्किल है, बनाए रखना मुश्किल है और इसमें काफी खराब मानव पारस्परिकता है। बस उन उपकरणों की संख्या देखें जो obfuscation (automake और उनके साथ) के शीर्ष पर obfuscation ढेर। दूसरी ओर, स्कॉन्स बस पाइथन है, और यह बहुत सारे उदाहरणों के साथ अच्छी तरह से प्रलेखित है। – Reinderien

+0

@ccook: स्कॉन्स बहुत अधिक स्वचालित है, और चूंकि आपके पास पाइथन की पूरी शक्ति है, तो आप 'glob.glob' और' os का उपयोग कर सकते हैं।एक निर्देशिका में फ़ाइलों की सूची प्राप्त करने के लिए listdir', इस प्रकार फाइलों की सूची को बनाए रखने से परहेज ... –

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