2012-05-14 29 views
5

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

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

इसलिए मुझे आपकी सलाह चाहिए।

पीएस वैसे, गूगल क्रोम जैसी बड़ी परियोजना कैसे करती है? क्या सॉफ्टवेयर सॉफ़्टवेयर वितरण के लिए उत्पन्न स्क्रिप्ट बनाने के लिए हर कोई किसी प्रकार का आईडीई उपयोग करता है?

+0

कई कंपनियों में "Buildmeister" जैसी कुछ समर्पित स्थिति है। बिल्ड पर्यावरण और यहां तक ​​कि इकाई परीक्षणों को बनाए रखने के लिए ये लोग नौकरियां हैं। – Mikhail

+0

@ मिशा, इस जिम्मेदारी को अक्सर कॉन्फ़िगरेशन प्रबंधक कहा जाता है। – Brady

+0

@ मिशा और वर्कफ़्लो के बारे में क्या? क्या यह पसंदीदा आईडीई में प्रत्येक डेवलपर लिखने के कोड की अनुमति देने का सही तरीका है, और बिल्डमेस्टर अपनी परियोजनाओं को एक निर्माण में परिवर्तित कर देगा? –

उत्तर

4

मैं नेटबीन्स का उपयोग सी ++ के लिए भी करता हूं और स्कैन के साथ संकलित करता हूं। मैं जेवी नेटबीन्स प्लगइन का उपयोग करता हूं जो वास्तव में अच्छी तरह से काम करता है।

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

आईडीई द्वारा स्वचालित रूप से स्कैन स्क्रिप्ट को बनाए रखने के लिए, मैं ऐसा नहीं करता हूं, मैं इसे हाथ से करता हूं।लेकिन ऐसा नहीं है कि मुझे दैनिक आधार पर इसका सामना करना पड़ेगा, इसलिए मुझे नहीं लगता कि यह महत्वपूर्ण है, विशेष रूप से स्क्रिप्ट को पढ़ने में कितना आसान है।

यहाँ SCons में निर्माण स्क्रिप्ट है कि एक ही CMake के लिए जैसा कि पहले उल्लेख के रूप में करता है:

env = Environment() 
env.EnsurePythonVersion(2, 5) 
env.EnsureSConsVersion(2, 1) 

libTarget = env.SharedLibrary(target = 'foo', source = ['a.cpp', 'b.cpp', 'c.pp']) 
env.Program(target = 'bar', source = ['bar.cpp', libTarget]) 

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

यदि आप उन अफवाहें सुनते हैं कि स्कैन अन्य विकल्पों की तुलना में धीमी है, तो SCons GoFastButton में कुछ पॉइंटर्स हैं जो मदद कर सकते हैं।

+0

यह दुखद है लेकिन नेटबीन्स के पास वास्तव में कोई स्कैन समर्थन नहीं है। लेकिन एसआर 42 ने ग्लोब() का उपयोग करने का अच्छा विचार दिया। मुझे लगता है कि मैं वास्तव में क्या चाहता हूँ। बीटीडब्ल्यू, आप स्पष्ट निर्दिष्ट क्यों पसंद करते हैं? –

+0

@AlexPovar, स्रोत फ़ाइलों के साथ यह कम आम है, लेकिन उपनिर्देशिकाओं के साथ अक्सर मेरे पास निर्देशिका के कई संस्करण होते हैं (उदाहरण के लिए subdirA और subdirA.old) और यदि दोनों संकलित हो जाते हैं, तो आप संघर्ष या अप्रत्याशित रनटाइम व्यवहार प्राप्त कर सकते हैं जो आसान नहीं है डीबग, क्योंकि मुझे लगता है कि यह केवल कुछ निर्देशिका संकलित करता है। स्रोत फ़ाइलों के साथ कुछ समान हो सकता है। साथ ही, नई स्रोत फ़ाइलों को जोड़ते समय, यह एक अनुस्मारक है कि उन्हें बिल्ड सिस्टम *** और *** स्रोत नियंत्रण में जोड़ा जाना आवश्यक है। – Brady

+0

क्या आप Netbeans से स्कैन कॉल करने के लिए इंटरमीडिएट मेकफ़ाइल का उपयोग करते हैं? –

4

अधिकांश बड़ी परियोजनाएं एक निर्माण प्रणाली के साथ चिपक जाती हैं जो स्वचालित रूप से उनके लिए सभी गन्दा विवरणों को संभालती है। मैं सीएमके का एक बड़ा प्रशंसक हूं (जो कि केडीई उनके सभी घटकों के लिए उपयोग करता है) लेकिन स्कोन एक और लोकप्रिय विकल्प है। मेरा संपादक (केडीवेल) माना जाता है कि वह खुद को सीएमके परियोजनाओं को संभालती है, लेकिन मैं अभी भी बिल्ड स्क्रिप्ट को संपादित करता हूं क्योंकि यह मुश्किल नहीं है।

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


एक साधारण CMake उदाहरण:

project("My Awesome Project" CXX) 
cmake_minimum_required(VERSION 2.8) 
add_library(foo SHARED a.cpp b.cpp c.cpp) #we'll build an so file 
add_executable(bar bar.cpp) 
target_link_libraries(bar foo) #link bar to foo 

यह स्पष्ट रूप से एक छोटी सी मामला है, लेकिन यह प्रबंधन और विस्तार के रूप में की जरूरत के लिए बहुत आसान है।

+0

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

+0

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

+0

सीएमके ठीक है, इसकी मुख्य समस्या इसका वाक्यविन्यास है (जिसे मैं हमेशा अंतर्ज्ञानी नहीं पाया)। आप स्कैन या वाफ जैसे कुछ को हरा नहीं सकते जो पाइथन, एक वास्तविक प्रोग्रामिंग भाषा का उपयोग करते हैं। सीएमओएस में फाइल स्कैन को बनाए रखने के लिए यह इतना आसान (यदि आसान नहीं है) होना चाहिए। – Brady

2

मैं निर्माण प्रणाली के रूप में स्कैन का उपयोग करने की कोशिश कर रहा हूं। मुझे इसके साथ कुछ सफलता मिली है, लेकिन मुझे फ़ाइल को जोड़ने या हटाने के दौरान स्क्रिप्ट बनाएं संपादित करना चाहिए। यह बहुत सुस्त है।

अपनी फ़ाइलों को संगठित किया गया है के आधार पर आप उदाहरण के लिए, का उपयोग कर सकते, Scon के Glob() समारोह सभी फाइलों को सूचीबद्ध करने के लिए व्यक्तिगत रूप से बिना एक सूची के रूप में स्रोत फ़ाइलें प्राप्त करने के लिए। उदाहरण के लिए, एक निष्पादन में सभी C++ स्रोत फ़ाइलों का निर्माण करने के लिए, आप कर सकते हैं:

Program('program', Glob('*.cpp')) 

आप अपने आदेशों का उपयोग करते CMake में भी ऐसा ही कर सकते हैं।

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

आप फ़ाइलों को कई फ़ोल्डरों में भी व्यवस्थित कर सकते हैं और सहायक स्कैन (या सीएमके लिस्ट.txt) फाइलें बना सकते हैं जो मास्टर बिल्ड स्क्रिप्ट कॉल कर सकते हैं।

+0

अच्छा लगता है। मेरे पास पैकेज के साथ जावा-स्टाइल प्रोजेक्ट संगठन है। ऐसा लगता है कि स्रोतों के बजाय निर्देशिकाओं के साथ काम करना काफी अच्छा लगता है। –