2012-03-28 20 views
7

हमारे पास एक जटिल सी ++ कोडबेस कई मोबाइल प्लेटफॉर्म को लक्षित करता है। वर्तमान में हम Windows CE (4.2 करने के लिए 6.5 दोनों कच्चे CE और मोबाइल उन के आधार पर), एंड्रॉयड (2.1+), iPhone (4), लगभग काम कर बड़ा (2.0+) और कुछ भी आता है तो है नई सी ++/सीएक्स चीज की, विंडोज फोन (8+) जोड़ने की संभावना है। इसके अलावा पर एक परीक्षण संस्करण Win32 और Win64 पर सेवा अनुप्रयोग जो कुछ कोड साझा करता है। हमने पहले से ही लिनक्स पर यूनिट परीक्षणों को संकलित करने की कोशिश की है और कुछ अन्य लिनक्स प्लेटफ़ॉर्म पर काम करने के लिए पहले से ही प्रश्न आए हैं (बहुत कम व्यवसाय वॉल्यूम अभी तक, लेकिन यह बदल सकता है)।एकाधिक मोबाइल प्लेटफार्मों के लिए टूल बनाएं

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

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

इसलिए मैं विभिन्न प्लेटफार्मों के इस सेट के लिए निर्माण प्रक्रिया को एकीकृत करने के तरीकों पर सलाह ढूंढ रहा हूं।

  • इसे बिल्कुल आईफोन और बाडा निष्पादन योग्य और एंड्रॉइड बिल्ड के मूल भाग को संभालने के लिए है (क्योंकि किसी के पास अलग-अलग परीक्षण करने के लिए सभी तीन प्लेटफार्म नहीं हैं)।
  • कई साझा पुस्तकालयों, एक मुख्य बाइनरी, एक ही प्लेटफॉर्म के लिए एक परीक्षण बाइनरी और कुछ प्लेटफार्मों पर निर्मित कुछ सहायक बाइनरी (अच्छी तरह से, वर्तमान में केवल Win32) सहित बड़ी परियोजना को संभालना है।
  • संस्करण नियंत्रण प्रणाली और कुछ उपयोगकर्ता-परिभाषित चर से संस्करण के साथ बिल्ड कॉन्फ़िगरेशन हेडर और जावा फ़ाइल उत्पन्न करने में सक्षम होना चाहिए, क्योंकि हम 18 करते हैं और विभिन्न ग्राहकों के लिए थोड़ा अलग निर्माण करते हैं।
  • और निश्चित रूप से इसे स्वचालित रूप से निर्भरताओं (हेडर फाइल) को संभालना होगा और आम तौर पर विश्वसनीय होना चाहिए।
अन्य बातों के मैं किसी भी कमियों के आसपास हैक करने के लिए तैयार कर रहा हूँ के लिए

, लेकिन मैं स्पष्ट रूप से खोल डक्ट टेप की राशि रखने के लिए और कम से कम करने के लिए थूक चाहते हैं, तो यह चाहिए:

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

हम अब तक की कोशिश कर रहा शुरू कर दिया है CMake (ज्यादा समय नहीं था, अब तक नहीं मिला है, लेकिन शीघ्र ही कुछ करना होगा) है और यह भी SCons बारे में सोचा। हालांकि मैंने कुछ साल पहले विंडोज सीई के लिए स्कैन के साथ निर्माण करने की कोशिश की है, लेकिन चूंकि यह विजुअल स्टूडियो के लिए मेकफ़ाइल-प्रकार परियोजनाएं उत्पन्न करता है और वे वीएस2005 में एम्बेडेड प्लेटफॉर्म के लिए काम नहीं करते हैं, मैंने छोड़ दिया। सीएमके देशी मेकफ़ाइल उत्पन्न कर सकता है, लेकिन सीई के लिए custom, bit out of date, branch की आवश्यकता है। इसलिए मैं यह पूछना चाहता हूं कि कोई अन्य उपकरण हैं जिन्हें हम इन उपकरणों के साथ देखना चाहते हैं या किसी ज्ञात ठोकरें ब्लॉक हैं, हमें से अवगत होना चाहिए।

अपडेट: मैं कई स्थानों में एंड्रॉयड देशी binaries के लिए निर्देश मिल गया है और pixellight भी cmake स्क्रिप्ट सीधे पैकेजिंग उपकरण को फोन करके apk उत्पन्न करने के लिए है। this shell script इसे दिखाता है। iPhone usage यहां प्रलेखित किया गया प्रतीत होता है।

+0

बनाम एंड्रॉइड (http://code.google.com/p/vs-android/) – Asaf

+0

@Asaf पर एक नज़र डालें: धन्यवाद, लेकिन हम अभी भी वीएस -2008 के साथ फंस गए हैं और अब अपग्रेड करना उचित नहीं लगता है पैसे। और यह आईफोन के साथ हमारी मदद नहीं करेगा, क्योंकि वीएस मैकोज़ पर काम नहीं करता है और मैंने आईफोन-लक्ष्यीकरण कंपाइलर के बारे में कभी नहीं सुना है जो विंडोज़ पर काम करेगा। –

+0

मैक ए * निक्स बॉक्स नहीं है, क्या आप वीएस के साथ बिल्डिंग नहीं कर सकते हैं और एक और सी ++ कंपाइलर का उपयोग कर सकते हैं? आपको अधिक कोड होने के लिए अपना कोड समायोजित करना पड़ सकता है, लेकिन वैसे भी यह सबसे अच्छा अभ्यास है। – baash05

उत्तर

4

उसी सीएमके बिल्ड फाइलों का उपयोग मेरे व्यक्तिगत प्रयोगकर्ता में कम से कम Win32 (VS2005), लिनक्स (उबंटू), और ओएस एक्स (10.5.8 तेंदुए) के लिए प्लेटफार्मों में परियोजनाओं को उत्पन्न करने और बनाने के लिए किया जा सकता है। एंड्रॉइड ऐप बिल्ड प्रक्रिया में सीएमके का उपयोग करने के लिए कई परियोजनाएं हैं, उदाहरण के लिए http://code.google.com/p/android-cmake/। इन सभी विकल्पों के साथ, मैं सीएमके को एक अच्छा विकल्प मानता हूं। आगे के सीएमके को लेने में आसान है, और यदि आपके पास config.ac और Makefile.ac फ़ाइलों को लिखने के साथ पूर्व अनुभव है तो भी आसान है।

नोट: कैसे CMake काम करता है:

  1. डेवलपर/मेंटेनर CMakefile पैदा करता है।
  2. बिल्डर सेमेक चलाता है, जो प्लेटफार्म विशिष्ट बिल्ड फाइलें उत्पन्न करने के लिए सीएमकेफाइल का उपयोग करता है। (लिनक्स मेकफ़ाइल/ओएसएक्स मेकफ़ाइल/वीएस प्रोजेक्ट फाइलें)
  3. बिल्डर बिल्ड कमांड को बंद कर देता है।
+0

ध्यान दें कि क्रॉस-कंपाइलिंग के लिए आपको क्रॉस-कंपाइलिंग वातावरण में सीएमके पेश करने वाली टूलचैन फ़ाइल की आवश्यकता होगी, [सीएमके विकी] (http://www.cmake.org/Wiki/CMake_Cross_Compiling) देखें। [Ios-cmake] (http://code.google.com/p/ios-cmake) और [android-cmake] (http://code.google.com/p/android-cmake/) हैं प्रोजेक्ट्स, क्रमशः आईओएस और एंड्रॉइड के लिए टूलचैन फाइलें प्रदान करते हैं। –

2

सीएमके सबसे अच्छा choise है। सीएमके के साथ शुरू 2.8.11 विंडोज सीई बॉक्स से बाहर समर्थित है। उस संस्करण के रिलीज होने तक सीएमके के Nightly Binary का उपयोग किया जा सकता है।

+0

धन्यवाद। देखना होगा; वर्तमान में हम http://gitorious.org/~paroga/cmake/parogas-cmake.git से प्राप्त शाखा का उपयोग कर रहे हैं, जो 2.8.3 पर आधारित है। –

+0

मुझे वर्तमान में इसके साथ एक छोटी सी समस्या है।यह मानता है कि एआरएम हमेशा एआरएमवी 4 आई है और इसलिए '/ मशीन: थंब' सेट करना चाहिए, लेकिन हम अभी भी 'पॉकेट पीसी 2003 (एआरएमवी 4)' के लिए संकलित हैं, जिसमें '/ मशीन: एआरएम' होना चाहिए। –

+0

मुझे ध्यान रखना चाहिए कि समस्या आसपास काम करने के लिए तुच्छ है;/मशीन ध्वज केवल सीएमकेई _ * _ LINKER_FLAGS में दिखाई देता है और मुझे वैसे भी पुराने संस्करण में कुछ बदलाव करने की आवश्यकता है। –

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

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