2010-07-26 9 views
10

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

मेरे परियोजनाओं एक पार मंच सी ++ अनुप्रयोग है, और निम्नलिखित शामिल हैं:

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

इसे व्यवस्थित करने का सबसे अच्छा तरीका क्या है?

अपने आप को उस पर काम करते हुए परियोजना जड़ से, मैं इसे इस तरह है:
/LibPortion
/GuiPortion
/libs/खुले स्रोत संग्रहालय
/libs/संशोधित खुले स्रोत संग्रहालय
/libs/संकलित पुस्तकालयों को संकलित/रखने के लिए, जिनमें कुछ ऐसे हैं जो विंडोज़ के लिए संकलित करते हैं, जिनमें सिग्विन लाइब्रेरी फाइलें

चीजों को व्यवस्थित करने का एक समझदार तरीका है? क्या वह सम्मेलन और अपेक्षाओं से मेल खाता है?

मेरी परियोजना में जांच करते समय, क्या ओपन सोर्स लाइब्रेरी के साथ-साथ परियोजना के हिस्से में जांच करना भी समझ में आता है? मुझे लगता है कि ऐसा करने के लिए यह समझ में आता है, क्योंकि यह परियोजना को स्थापित करने और नए देव के लिए दौड़ने के साथ घर्षण को कम करता है। निश्चित रूप से मुझे कम से कम संशोधित ओपन सोर्स पुस्तकालयों में जांच करनी चाहिए।

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

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

+2

@nantucket वास्तव में भयानक कुछ नहीं के रूप में जब तक हो सकता है क्या मायने रखती है सबसे यह सब का दस्तावेजीकरण कर रहा है - कैसे स्रोत एक निष्पादन योग्य बनाने और परिनियोजन योग्य संस्करण बनाने के लिए कैसे एक करने के लिए संरचित है से। मैं आमतौर पर विंडोज प्रोजेक्ट करते समय पुस्तकालय स्रोत कोड की जांच करता हूं और लिनक्स के दौरान स्थापित पुस्तकालयों और संकुलों पर भरोसा करता हूं। अगर मुझे दोनों को करने की ज़रूरत है, तो मैं पुस्तकालयों में भी जांच करता हूं। लेकिन कीवर्ड है: * दस्तावेज़ * यह सब। –

उत्तर

3

सामान्य रूप से, अपने काम को तीसरे पक्षों से अलग करें। सबसे बुनियादी स्तर पर, अपने रूट फ़ोल्डर देखने के लिए की तरह हो सकता है:

|- GUI 
|- Library 
|- Third-party 
    |- lib 
    |- source 

मैं लाइसेंस अनुपालन और उपयोग में आसानी के प्रयोजनों के लिए दो उप-फ़ोल्डर में "तीसरी पार्टी" फ़ोल्डर अलग कर दिया। आप तृतीय पक्ष libs को कितनी वितरित करते हैं, पूरी तरह से उनके लाइसेंस पर निर्भर करेगा। अपनी मेकफ़ाइल सेट अप करें ताकि संकलित libs third-party\lib फ़ोल्डर में उतर जाएंगे (जहां आप किसी भी पूर्व-संकलित libs भी रखेंगे)। इस तरह उपयोगकर्ता पूर्व संकलित libs डाउनलोड कर सकते हैं और source फ़ोल्डर को अनदेखा कर सकते हैं या स्रोत कोड डाउनलोड कर सकते हैं और lib फ़ोल्डर को अनदेखा कर सकते हैं, चाहे वे तीसरे पक्ष के libs को फिर से बनाना चाहते हैं या नहीं।

यदि आपको बाइनरी और स्रोत कोड फ़ॉर्म में अपने संशोधित संस्करण को वितरित करने की आवश्यकता है, तो आपको अपने संशोधित संस्करण को अपने स्रोत भंडार में होस्ट करने की आवश्यकता होगी (पूर्व-संकलित lib प्रदान करना आपकी पसंद है)।

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

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

यह भी संभव है कि आपके संशोधित पुस्तकालयों को कार्यान्वित किया जा सके ताकि बाहरी संपत्ति तीसरे पक्ष के रेपो से अनमोडिफाइड स्रोत को पुनर्प्राप्त कर सके, और आपका निर्माण प्रणाली आपके संशोधनों वाले पैच को लागू कर सकती है। इस तरह, आप तकनीकी रूप से संशोधित कोड वितरित नहीं करेंगे, जिसका अर्थ हो सकता है कि आपको कम लाइसेंस शर्तों का पालन करना होगा।

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

3

यदि मैं आप थे तो मैं पहले परियोजना को अपने कोड और तृतीय पक्ष पुस्तकालयों के बीच अलग कर दूंगा। निम्नलिखित पेड़ काम कर सकता था:

/ 
|- GUI 
|- lib 
|- third parties 
    |- compiled targets 
    |- "your first library" 
    |- "another library" 
    |- ... 

आप अपने भंडार imho पर पुस्तकालयों नहीं संकलित की मेजबानी करनी चाहिए। डेवलपर्स को अपने कंप्यूटर पर संकलित करने के लिए यह अधिक लचीला है, लेकिन यदि आप एक डिलिवरेबल टैरबॉल चाहते हैं, तो इसमें प्रीकंपिल्ड लाइब्रेरी शामिल होनी चाहिए।

+0

तो आप इस परियोजना के लिए संशोधित तृतीय पक्ष पुस्तकालयों के साथ क्या करेंगे? – Nantucket

+0

यह आपके द्वारा किए गए संशोधनों पर निर्भर करता है। अगर वे थोड़ा संशोधित हैं, तो शायद पैच निर्देशिका पर्याप्त हो सकती है। यदि संशोधन अधिक महत्वपूर्ण हैं, तो निर्देशिका को अपनी lib निर्देशिका में ले जाने का प्रयास करें और इसे नाम (यानी myGorgeousCPPLibrary) से अधिक अर्थपूर्ण में बदल दें। – Opera

+0

संकलित बाइनरी के बारे में क्या? वह कहाँ जा रहे है? आंतरिक रूप से संकलित पुस्तकालय कहां जाते हैं? – Simon

5

/
|- bin - Compiled binaries go here (not submitted to source-control) 
|- build - buildscripts, tools used to build your code. 
|- lib - Compiled libraries go here (not submitted to source-control) 
|- local - (not submitted to source control) 
    |- obj - Compiled object-files (not submitted to source-control) 
    |- msvc - Autogenerated solution files for visual studio (not submitted to source control) (if applicable) 
    |- scripts - Autogenerated script files (if applicable) 
|- units 
    |- libportion 
     |- include - external headers for other units to see 
     |- src 
    |- guiportion 
     |- include 
     |- src 
|- external 
    |- externallib1 
     |- include 
     |- src 

build - simplified build-script calling the correct convention to your buildscripts. 
README - text-file explaining your software and the layout of your source. 

यह वह संगठन है जिसे मैं हाल ही में उपयोग कर रहा हूं और इसमें शामिल सभी लोगों द्वारा बहुत सराहना की गई है। यह पुस्तकालयों में एक दूसरे के बीच पुस्तकालयों को अलग करना और पुस्तकालयों में आंतरिक शीर्षलेख और बाहरी शीर्षलेख प्रदान करना आसान बनाता है।

संपादित करें: "स्थानीय" dir जोड़ा गया।

0

आईएमएचओ विभिन्न खुली स्रोत परियोजनाओं के संगठन को देखकर मदद कर सकता है।

vlc project page एक अच्छा संदर्भ

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