2013-08-08 3 views
10

क्या यह Cabal कॉन्फ़िगरेशन फ़ाइल लिखने के लिए संभव है, जिसमें एकाधिक Library sections शामिल हैं?कई पुस्तकालय अनुभागों के साथ Cabal

मैं लाइब्रेरी अनुभाग और निष्पादन योग्य वर्गों का वर्णन the documentation में पाया है, तो ऐसा लगता है, कि यह असंभव है एक कबाल विन्यास फाइल में अधिक लाइब्रेरी अनुभाग डाल करने के लिए।

लेकिन अगर मैं कई हास्केल पुस्तकालयों और कई निष्पादन योग्य
विकसित कर रहा हूं और उन सभी का संकलन और परीक्षण करना चाहता हूं तो मुझे क्या करना चाहिए?

उत्तर

4

मुझे पता चला, कि मेरी समस्या easly नवीनतम cabal-dev के साथ हल किया जा सकता है।

आप 2 परियोजनाओं मिल गया है, तो: A और B और आप उन्हें समानांतर में विकसित करना चाहते हैं, अपने अच्छा cabal-dev install A B उपयोग करने के लिए - यह निर्माण और उन दोनों को स्थानीय cabal-dev भंडार करने के लिए स्थापित हो जाएगा। यदि आप इस आदेश को फिर से चलाएं, तो उन्हें फिर से बनाया जाएगा और यदि आवश्यक हो तो पुनर्स्थापित किया जाएगा।

प्रलेखन के अनुसार - आप करने के लिए नए रजिस्टर या ओवरराइड मौजूदा पैकेज पर स्थानीय कबाल-देव hackage, आप cabal-dev add-source, मूल रूप से स्रोत की प्रतिलिपि जो इस्तेमाल करना चाहिए चाहते हैं और आप इसे की तरह स्थापित करने के लिए अनुमति देता है hackage पर उपलब्ध था।

7

AFAIK, आप एक कैबल फ़ाइल में एक से अधिक लाइब्रेरी नहीं डाल सकते हैं। Name फ़ील्ड (कैबल फ़ाइल के शीर्ष स्तर पर) में निर्दिष्ट नाम लाइब्रेरी के नाम के रूप में उपयोग किया जाता है, इसलिए अतिरिक्त पुस्तकालयों के नाम निर्दिष्ट करने के लिए एक तंत्र प्रतीत नहीं होता है।

प्रैक्टिस में, मुझे यह समस्या नहीं मिली है। मैं प्रत्येक लाइब्रेरी को अपनी खुद की कैबल फ़ाइल के साथ एक अलग निर्देशिका में विकसित करता हूं। एक बार जब आप विकसित की गई लाइब्रेरी पर cabal install चलाते हैं, तो इसे आपके निष्पादन योग्य (Build-Depends अनुभाग में) के लिए कैबल फ़ाइल में संदर्भित किया जा सकता है, बस हैकेज पर एक पैकेज के समान ही।

तो, उदाहरण के लिए, आपको लगता है कि इस तरह दिखना कबाल फाइलों के साथ दो पुस्तकालयों अगर:

Name:    my-library-1 
. . . 

और

Name:    my-library-2 
. . . 

फिर अपने निष्पादन उन्हें इस तरह संदर्भित कर सकते हैं के लिए कबाल फ़ाइल:

Name:    my-program 
. . . 
Executable run-program 
Main-Is:   Main.hs 
Build-Depends: my-library1, 
        my-library2, 
        . . . 

आपको अपने पुस्तकालयों के विशिष्ट संस्करणों की भी आवश्यकता हो सकती है। उदाहरण के लिए:

Build-Depends: my-library1==1.2.*, 
        my-library2>=1.3 
+0

धन्यवाद, मुझे पता है कि मैं इसे इस तरह उपयोग कर सकता हूं, लेकिन मैं एक साथ कई पुस्तकालयों को विकसित करने की थर्म प्रक्रिया को सरल बनाना चाहता था - और उन्हें हर समय बिल्डिंग और पुनर्स्थापित करना, लेकिन ऐसा लगता है कि 'कैबल-देव' मेरी समस्या हल करती है । –

+0

आह, मुझे एहसास नहीं हुआ कि आप उस तरह की चीज 'कैबल-देव' के साथ कर सकते हैं। आप शायद यह वर्णन करना चाहें कि आपने यह कैसे किया है, इसे यहां एक उत्तर के रूप में पोस्ट करें, और फिर इसे स्वीकार करें। दूसरों को समाधान में रुचि हो सकती है। – mhwombat

+0

@mhwombad - नीचे देखें :) –

0

आंतरिक पुस्तकालयों के साथ कैबल 2 में यह संभव है, जिसे "सुविधा" पुस्तकालय कहा जाता है: https://github.com/haskell/cabal/pull/3022। यह आपको इन पुस्तकालयों को स्थापित करने की अनुमति नहीं देगा, हालांकि उन्हें अंतिम निष्पादन योग्य और सार्वजनिक पुस्तकालय में .cabal फ़ाइल द्वारा उजागर करने की अनुमति है। यदि आप प्रगति पर कई चीजें बनाना चाहते हैं, तो आपको cabal.project फ़ाइल का उपयोग करना चाहिए - http://blog.ezyang.com/2016/05/announcing-cabal-new-build-nix-style-local-builds/ इस पर कुछ जानकारी है।

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