2009-09-30 13 views
7

मैं पर्ल में लिखी गई एक बड़ी-आश परियोजना स्थापित करने की कोशिश कर रहा हूं। IBM MakeMaker tutorial अभी तक बहुत उपयोगी रहा है, लेकिन मुझे समझ में नहीं आता कि सभी मॉड्यूल को मुख्य कार्यक्रम में कैसे लिंक किया जाए। मेरे प्रोजेक्ट रूट में, मेरे पास MANIFEST, Makefile.PL, README, bin निर्देशिका, और lib निर्देशिका है। मेरी bin निर्देशिका में, मेरे पास मेरी मुख्य स्क्रिप्ट है (Main.pl)। lib निर्देशिका में, मेरे पास मेरे प्रत्येक मॉड्यूल हैं, utils निर्देशिका आदि में अपनी संबंधित निर्देशिकाओं में विभाजित हैं (यानी Utils::Util1 और Utils::Utils2)।मैं एक नया पर्ल मॉड्यूल वितरण कैसे शुरू करूं?

bin/Main.pl 
lib/Utils/Util1.pm 
lib/Utils/Util2.pm 
lib/Utils/t/Utils1.t 
lib/Utils/t/Utils2.t 
Makefile.PL 
MANIFEST 
README 

Makefile.PL निम्नलिखित है:: प्रत्येक मॉड्यूल निर्देशिका में, वहाँ भी एक t निर्देशिका निम्नलिखित गया है परीक्षण

मेरे MANIFEST फ़ाइल युक्त,

use ExtUtils::MakeMaker; 
WriteMakefile(
    'NAME'=>'Foo', 
    'VERSION_FROM'=>'bin/Main.pl', 
    'PREREQ_PM'=>{ 
    "XML::Simple"=> 2.18}, #The libraries that we need and their 
        #minimum version numbers 
    'EXE_FILES' =>[("bin/Main.pl")] 
); 

मैं बनाने के लिए और चलाने के बाद, कार्यक्रम दुर्घटनाग्रस्त है, शिकायत है कि इसे Utils::Util1 नहीं मिल रहा है, और जब मैं 'make test चलाता हूं, तो यह no tests defined कहता है। क्या कोई सुझाव दे सकता है? मैंने कभी भी इस तरह के बड़े पैमाने पर प्रोजेक्ट नहीं किया है, और मुझे कई मॉड्यूल

+1

मुझे आशा है कि "उपयोग :: Util1" और "Utils :: Util2" उदाहरण उदाहरण हैं। – innaM

+0

वे सिर्फ उदाहरण नाम हैं। मैंने अभी तक सभी मॉड्यूल नहीं लिखे हैं जिनकी मुझे आवश्यकता होगी, लेकिन मैं कुछ बनाने में सक्षम होना चाहता था। – Tim

उत्तर

5

इस संरचना का प्रयास करें:

bin/Main.pl 
lib/Utils/Util1.pm 
lib/Utils/Util2.pm 
Makefile.PL 
MANIFEST 
README 
t/Utils1.t 
t/Utils2.t 

रूप ysth कहा, make अपने मॉड्यूल स्थापित नहीं है, यह सिर्फ एक blib निर्देशिका में उन्हें बनाता है। (आपके मामले में यह सिर्फ उन्हें कॉपी करता है, लेकिन यदि आपके पास एक्सएस कोड था, तो इसे एक सी कंपाइलर के साथ संकलित किया जाएगा।) उपयोग करने के लिए नियमित स्क्रिप्ट के लिए अपने मॉड्यूल स्थापित करने के लिए make install का उपयोग करें।

आप make और make install के बीच अपनी स्क्रिप्ट को चलाना चाहते हैं, तो आप कर सकते हैं:

perl -Mblib bin/Main.pl 

-Mblib पर्ल का निर्देश अस्थायी रूप से खोज पथ के लिए उचित निर्देशिका जोड़ने के लिए है, तो आप एक से अनइंस्टॉल मॉड्यूल की कोशिश कर सकते । (make test स्वचालित रूप से करता है।)

2

डिफ़ॉल्ट रूप से परीक्षणों को शीर्ष-स्तर टी निर्देशिका (या test.pl फ़ाइल) में देखा जाता है, लेकिन वह कुछ सीमाएं हैं, इसलिए टालना चाहिए)।

आप कहते हैं "मैं बनाने और चलाने के बाद" ... चीजों को एक ब्लिब निर्देशिका संरचना में स्थापित करने के लिए तैयार करता है, लेकिन स्क्रिप्ट को चलाने के लिए कुछ भी विशेष नहीं करता है। (परीक्षण विशेष है; यह परीक्षण चलाने में सक्षम होने के लिए ब्लिब से पर्ल के @INC से उचित पथ जोड़ता है।) आपको उन मॉड्यूल को स्थापित करने के लिए "इंस्टॉल करें" करने की आवश्यकता होगी जहां आपकी स्क्रिप्ट उन्हें मिलेगी (या एक का उपयोग करें PAR जैसे टूल को आपकी स्क्रिप्ट के साथ पैकेज करने के लिए)।

9

क्या मैं module-starter भी सुझा सकता हूं? यह स्वचालित रूप से एक कंकाल परियोजना तैयार करेगा जो "जस्ट वर्क्स" है। मैंने जेनरेट किए गए कंकाल फ़ाइलों को पढ़कर पर्ल मॉड्यूल संगठन के बारे में मुझे कुछ नहीं पता था। यह सभी अच्छी तरह से प्रलेखित है, और एक बड़ी परियोजना को बढ़ाने के लिए आधार के रूप में उपयोग करने में काफी आसान है। आप यह देखने के लिए the getting-started docs देख सकते हैं कि यह आपको क्या देता है।

रनिंग module-starter आप एक पर्ल वितरण (जैसे विकल्प --module, का उपयोग कमांड लाइन: एक ही वितरण में कई मॉड्यूल बनाने के लिए

module-starter --distro=Project --module=Project::Module::A,Project::Module::B [...] 

) दे देंगे मॉड्यूल के एक नंबर से मिलकर,। यह तब तक आप पर निर्भर करता है कि आप अपने प्रोजेक्ट को एक ही वितरण के रूप में व्यवस्थित करना चाहते हैं, जिसमें कई मॉड्यूल एक साथ काम कर रहे हैं, या कई वितरण जो अलग से रिलीज़ किए जा सकते हैं लेकिन जो एक दूसरे पर निर्भर करते हैं (जैसा कि आपके Build में कॉन्फ़िगर किया गया है या Makefile.PL फ़ाइल) एक पूर्ण प्रणाली प्रदान करने के लिए।

+0

धन्यवाद। मैंने इसके माध्यम से पढ़ा और परियोजनाओं के बारे में कुछ भी नहीं मिला, केवल मॉड्यूल बनाने के बारे में – Tim

+0

टिम: मैंने अपने उत्तर को संशोधित करने के लिए संशोधित किया है कि पर्ल में वितरण और मॉड्यूल कैसे काम कर सकते हैं। आशा करता हूँ की ये काम करेगा? अगर हम में से कोई अभी भी उलझन में है तो कृपया अपने प्रश्न को संशोधित करें या दोबारा जवाब दें :)। – Gaurav

+0

यह वास्तव में एक अच्छा विचार की तरह लगता है, और मुझे इसे अपने अगले प्रोजेक्ट के लिए उपयोग करना होगा। मैंने पहले से ही एक मकेमेकर प्रोजेक्ट स्थापित किया है, लेकिन यह आपके शुरुआती पोस्ट की तुलना में मेरे प्रश्न का उत्तर बहुत बेहतर है – Tim

13

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

आपको खुद को संरचना बनाने की कोशिश करके कभी भी एक पर्ल प्रोजेक्ट शुरू नहीं करना चाहिए। यह बहुत अधिक काम है और आप हमेशा कुछ भूल जाएंगे।

वहाँ h2xs, एक प्रोग्राम है जो perl साथ आता है और एक उपकरण पर्ल के गोंद भाषा XS में फ़ाइलों को कनवर्ट करने में होना चाहिए था है। यह ठीक काम करता है, लेकिन इसके लाभ यह है कि perl के साथ आता है:

% h2xs -AXn Module::Name 

Module::Starter तरह, थोड़ा और अधिक परिष्कृत है, हालांकि आप CPAN से इसे पाने के लिए किया है। यह वह टूल है जिसका हम Intermediate Perl में उपयोग करते हैं क्योंकि यह आसान है। यह आपकी जानकारी के साथ कुछ टेम्पलेट्स भर देता है:

% module-starter --author=... --email=... --module=... 

आप इस काफ़ी करने के लिए कर रहे हैं, आप तो Distribution::Cooker करने के लिए कि कन्वर्ट कर सकती है ताकि आप अपनी फ़ाइलों और सामग्री को अनुकूलित कर सकते हैं। यह एक बदबूदार उपयोगिता है जिसे मैंने अपने लिए लिखा था ताकि मैं अपने स्वयं के टेम्पलेट्स का उपयोग कर सकूं।

% dist_cooker Module::Name 

तुम सच में हार्ड कोर हैं, तो आप Dist::Zilla चाहते हो सकता है, लेकिन है कि जो लोग पहले से ही जानते हैं कि वे क्या कर रहे हैं के लिए अधिक है।

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