C / C ++ प्रोजेक्ट के लिए निर्भरता को ठीक से कैसे प्रबंधित करें?


11

मेरे पास एक परियोजना है जो 3-4 अलग-अलग खुले स्रोत C / C ++ पुस्तकालयों का उपयोग करती है।

मैंने इन पुस्तकालयों को कई प्लेटफार्मों के लिए बनाया है और अपनी परियोजना में विभिन्न प्लेटफार्मों के लिए फ़ाइलों और स्थिर कामों को शामिल किया है।

हालांकि, मैं कुछ समस्याओं के साथ संघर्ष करता हूं। ये सभी परियोजनाएं निर्भरता प्रबंधन के आसपास हैं। और मैं सर्वोत्तम अभ्यास सलाह के लिए देख रहा हूँ।

1) मुझे कैसे पता चलेगा कि मैं वास्तव में क्या उपयोग करता हूं?

मेरे पास एक रास्ता नहीं है कि मैं एक स्थिर परिवाद का एक संस्करण प्राप्त करूं। नतीजतन, मुझे किसी तरह ट्रैक करने की ज़रूरत है कि मैं किस स्थिर स्टेटिक का उपयोग कर रहा हूं (हो सकता है कि वह एक कमेटी का SHA हो, जहां से इसे बनाया गया था)?

यह विशेष रूप से महत्वपूर्ण है, जब मुझे यह पता लगाने की आवश्यकता है कि इन कामों को कब करना है।

2) मैं बिल्ड का पुन: निर्माण कैसे करूं?

मैं एक विशिष्ट मंच के लिए कुछ विशिष्ट पुस्तकालय बनाने के लिए संघर्ष कर सकता था। मुझे यह पता लगाने में थोड़ा समय लगा।

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

3) क्या मुझे इन पुस्तकालयों को स्रोत कोड की एक प्रति प्राप्त करने के लिए कांटा करना चाहिए?

यह कम चिंता का विषय है। हालाँकि, यह अभी भी एक चिंता का विषय है। यह सुनिश्चित करना अच्छा है कि बनाता है प्रतिलिपि प्रस्तुत करने योग्य हैं (और उस तरह के स्रोत कोड की आवश्यकता होती है)।

जवाबों:


5

क्या आपको वास्तव में हमेशा एक आश्रित पुस्तकालय के सटीक संस्करण का उपयोग करने की आवश्यकता है? क्या यह बुरी तरह से लिखा गया है / क्या यह संस्करण में हर मामूली वृद्धि के साथ एपीआई तोड़ रहा है?

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

यदि आपको वास्तव में प्रतिलिपि प्रस्तुत करने योग्य बिल्ड की आवश्यकता है, तो आपको कंपाइलर के सटीक संस्करण पर भी ध्यान देना चाहिए और यह मानक लाइब्रेरी है, शायद ऑपरेटिंग सिस्टम भी। इस मामले में, सटीक वातावरण के साथ एक बिल्ड मशीन होना, जिसकी आपको आवश्यकता है, मेरी राय में, स्रोत कोड रिपॉजिटरी में संकलित पुस्तकालयों में जाँच करने से बेहतर है।


2
मुझे नहीं लगता कि मुझे सटीक संस्करण का उपयोग करने की आवश्यकता है। हालांकि, मुझे यह जानने की जरूरत है कि मैं किसका उपयोग कर रहा हूं। उदाहरण के लिए, अगर किसी को पता चलता है कि ओपनएसएसएल 1.1.0 बी में भारी कमजोरी है, तो मैं बेहतर जानता हूं कि क्या मैं ओपनएसएसएल 1.1.0 बी या 1.1.0 सी का उपयोग करता हूं
विक्टर रोनिन

बिल्ड रिप्रोड्यूसबिलिटी के बारे में, यह शायद मेरी माध्यमिक चिंता है।
विक्टर रोनिन

3

मुझे कैसे पता चलेगा कि मैं वास्तव में क्या उपयोग करता हूं?

यदि शामिल फ़ाइलों या libs फ़ाइलों में पहले से ही एक संस्करण संख्या शामिल नहीं है, तो एक पाठ फ़ाइल "version.txt" (प्रत्येक संस्करण को अपने आप में वर्जन से युक्त) में जोड़कर प्रत्येक lib फ़ोल्डर में ले जाएं और इसे अपने VCS में जांच लें, साथ ही साथ lib और फ़ाइलों को शामिल करें । हालाँकि, यदि आप कार्यपद्धति (पूर्णांक 3) का पूर्ण स्रोत बनाते हैं, तो संभावना अधिक है कि संस्करण संख्या वाली एक स्रोत कोड फ़ाइल पहले से मौजूद है, इसलिए इस मामले के लिए अपना स्वयं का रखरखाव करने की आवश्यकता नहीं है।

मैं बिल्ड का पुन: निर्माण कैसे करूं?

जितना संभव हो उतना स्वचालित करने का प्रयास करें। स्क्रिप्ट, मेकफाइल्स, या अपने पसंदीदा बिल्ड टूल की फ़ाइलों का उपयोग करें। स्रोत नियंत्रण के तहत यह सब रखो। यदि आवश्यक मैनुअल कदम हैं, तो विवरण को एक पाठ फ़ाइल में लिखें (उदाहरण के लिए, readme_build.txt) और स्रोत नियंत्रण में भी डाल दें।

क्या मुझे इन पुस्तकालयों को स्रोत कोड की कॉपी के लिए कांटा करना चाहिए?

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

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


तो, जवाब है "यह मैन्युअल रूप से करें" :) मुझे उम्मीद थी कि कोई व्यक्ति कहेगा ... ओह ... उस के लिए एक उपकरण है :) जब आप कहते हैं "स्रोत कोड की प्रतिलिपि" आपका मतलब है, बस एक प्राप्त करें स्रोत के साथ टार फ़ाइल और इसे स्रोत नियंत्रण में डंप करें?
विक्टर रोनिन

1
@VictorRonin: नहीं, इसका उत्तर है "अपने VCS को आपके लिए यह सब करने दें", और "जितना आप मानक बिल्ड टूल का उपयोग कर सकते हैं उतना स्वचालित करें"। आप वह हैं जो एक विशिष्ट संस्करण चुनता है, और आप वह हैं जो आपको अपने पर्यावरण के लिए निर्मित चरणों, लिंक और संदर्भों को परिभाषित करने की आवश्यकता है। इन विसंगतियों को प्रकट करने के लिए मानक प्रक्रिया स्क्रिप्ट, मेकफाइल, प्रोजेक्ट फाइल आदि के माध्यम से है
डॉक्टर ब्राउन

... और आपको लिब या स्रोत स्रोत कोड कैसे मिलता है यह इस बात पर निर्भर करता है कि अनुरक्षक / विक्रेता इसे कैसे प्रदान करता है। शायद एक टार बॉल, शायद गिट हब के लिए सीधी पहुँच के द्वारा, शायद एक नौगट पैकेज।
Doc Brown
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.