2016-09-26 9 views
9

मैं सी ++ दुनिया के लिए बहुत नया हूं, इसलिए कृपया मुझे ऐसे डमी प्रश्न के लिए खेद है। मैं थोड़ा सा गूगल, लेकिन उचित जवाब खोजने में सक्षम नहीं था।सी ++ निर्भरताओं का प्रबंधन कैसे करें (उदाहरण के लिए जिथब से पुस्तकालयों का उपयोग करें)

मेरा प्रश्न काफी सरल है - मुझे सी ++ दुनिया में lib का उपयोग कैसे करना चाहिए। उदाहरण के लिए जावा में - इस कार्य के लिए maven और gradle है। पायथन में - मैं pip का उपयोग करता हूं। जावास्क्रिप्ट npm और bower में सभी चीज़ें करें। सी # में आप nuget का उपयोग करते हैं या बस अपनी परियोजना में डीएलएल lib जोड़ते हैं। लेकिन सी ++ चीजों की तरह दिखता है इतना आसान नहीं है।

मुझे एक उपकरण मिला, जिसे conan कहा जाता है लेकिन उनके पास libs की मात्रा बहुत छोटी है और इसमें कोई भी शामिल नहीं है जिसे मैं लॉक कर रहा हूं।

तो, उदाहरण के लिए - मैं nlp lib meta का उपयोग करना चाहता हूं। ऐसा लगता है कि वे कोई इंस्टॉलर फ़ाइल प्रदान नहीं करते हैं। तो मुझे लगता है कि मुझे जिथूब से स्रोत प्राप्त करने की आवश्यकता है। क्या मुझे उन्हें संकलित करना चाहिए और फिर मेरे प्रोजेक्ट में संकलित फाइलों को जोड़ने की कोशिश करनी चाहिए या मुझे अपने प्रोजेक्ट में lib फ़ोल्डर रखना होगा, और उन फ़ोल्डर में meta's स्रोत डालें और meta's स्रोतों के साथ काम करने के बाद मेरे प्रोजेक्ट में हैं?


मेरे सवाल यह है कि विशिष्ट meta lib स्थापित करने के लिए के बारे में नहीं है, लेकिन देखने का स्रोत प्रबंधन बिंदु से अधिक। यदि मैं उदाहरण के लिए Windows पर Visual Studio का उपयोग करता हूं, लेकिन मेरा कॉलेग ClionLinux के तहत कोडिंग करेगा। और मुझे एहसास नहीं होगा कि सी ++ दुनिया में निर्भरताओं का प्रबंधन करने का एक उचित तरीका कौन सा है।

+0

आपके द्वारा लिंक की गई लाइब्रेरी में विभिन्न प्लेटफार्मों के लिए एक व्यापक सेटअप मार्गदर्शिका है। क्या आपने इसका पालन करने की कोशिश की? –

+0

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

+2

सी ++ समुदाय में आम तौर पर एक सर्वव्यापी पैकेज प्रबंधक की कमी होती है, जब तक कि आप उस लाइब्रेरी में से किसी एक में उस लाइब्रेरी को नहीं ढूंढ पाते हैं, तो आप कोड डाउनलोड करते हैं और इसे स्वयं बनाते हैं। – Niall

उत्तर

3

सी ++ में pip या npm/bower जैसी कोई चीज़ नहीं है। मुझे नहीं पता कि maven या gradle को सी ++ पुस्तकालयों को संभालने के लिए राजी किया जा सकता है।

सामान्य तौर पर, आप कहीं

  • पुस्तकालय फ़ाइलें (स्टैटिक पुस्तकालयों, या DLLs/साझा वस्तुओं) एक निर्देशिका में

    • हैडर फाइलों के साथ अंत करने के लिए जा रहे हैं। यदि लाइब्रेरी कुछ हेड लाइब्रेरीज़ जैसी हेडर-लाइब्रेरी है, तो आपको इसकी आवश्यकता नहीं होगी।

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

    उम्मीद है कि लाइब्रेरी बनाने के निर्देश पुस्तकालय वेबसाइट पर शामिल किए जाएंगे। जैसा कि टिप्पणियों में उल्लेख किया गया है, 'मेटा' उस पर काफी अच्छा प्रतीत होता है। (जैसे -I) (जैसे -l) लिंकर बताने के लिए लिंक करने के लिए हेडर फाइल युक्त निर्देशिका निर्दिष्ट करने के लिए, और आप एक लिंकर विकल्प की आवश्यकता हो सकती

    जब आप पुस्तकालय के साथ संकलित करने के लिए प्रयास करते हैं, आप एक कमांड लाइन विकल्प की आवश्यकता हो सकती आपकी पुस्तकालय के खिलाफ।

  • 4

    सी ++ दुख की बात है पुस्तकालयों के लिए कोई पैकेज प्रबंधक नहीं है। कुछ वहां हैं और एक होने की कोशिश करें जो अभी भी छोटे और बिखरे हुए हैं (कोंन की तरह)।

    लिनक्स में आपके पास कुछ "-dev" पैकेज हैं जिन्हें आप इंस्टॉल कर सकते हैं लेकिन वे "सब" भी नहीं हैं।

    आप शायद उन्हें स्वयं डाउनलोड कर सकते हैं। इसके बावजूद आपको उन पुस्तकालयों को एकीकृत करने की समस्या है। आपके पास प्रति ऑपरेटिंग सिस्टम के अलग-अलग बिल्ड सिस्टम हैं ताकि आपको देखना होगा कि आप सी ++ फ़ाइलों को कैसे बनाते हैं।

    दृश्य स्टूडियो के साथ खिड़कियों की तरह आप एक दृश्य स्टूडियो परियोजना या एक nmake संगत makefile पुस्तकालयों का निर्माण और फिर उन्हें अपनी परियोजना में जोड़ने के लिए निकलना है। लिनक्स मेकफ़ाइल के साथ ही।

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

    हाँ ये कुछ विचार हैं। अफसोस की बात यह है कि इसका कोई आसान/निश्चित उत्तर नहीं होगा क्योंकि कोई वास्तविक केंद्रीय सी ++ पैकेट रिपोजिटरी नहीं है जिसे एक बिल्ड सिस्टम में भी एकीकृत किया गया है।

    0

    लोकप्रिय सी के एक नंबर ++ nuget packages के माध्यम से जारी किया गया हैं। आप उनके लिए गैलरी पर खोज सकते हैं, आमतौर पर native या c++ टैग का उपयोग कर सकते हैं। जाहिर है आपको अपने ओएस के लिए एक न्यूज मैनेजर की ज़रूरत है, और मुझे पूरा यकीन है कि सी ++ न्यूजेट पैकेज एमएसबिल्ड पर बहुत सारे काम के लिए भरोसा करते हैं, इसलिए आपको अच्छी तरह से काम करने के लिए एक गैर-विजुअल स्टूडियो उन्मुख सेटअप प्राप्त करने में परेशानी हो सकती है।

    इसके अलावा ग्रैडल में वास्तव में native dependencies के लिए कुछ समर्थन भी है। मैंने थोड़ी देर पहले देखा था लेकिन उस पर काम कम हो गया था क्योंकि वीएस 2015 के लिए समर्थन की कमी थी।

    2

    Cget मानक cmake का उपयोग करता है, और लिनक्स और विंडोज के लिए काम करता है कि किसी भी पैकेज स्थापित हो जाएगा। इसने सीधे जिथब से पैकेज प्राप्त करने के लिए वाक्यविन्यास छोटा कर दिया है (जैसे cget install google/googletest)।

    इसके अलावा, निर्भरता स्वचालित रूप से एक requirements.txt फ़ाइल में सूचीबद्ध करके उनका रूप में अच्छी तरह से डाउनलोड किया जा सकता है।

    वहाँ भी है गैर cmake संकुल और भंडार here 300 पुस्तकालयों (और बढ़ती) से अधिक है स्थापित करने के लिए व्यंजन विधि। तो आप केवल cget install pfultz2/cget-recipes curl के साथ कर्ल स्थापित कर सकते हैं।

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

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