2010-08-28 8 views
7

मैंने हाल ही में perlxstut का उपयोग कर एक्सएस सीखना शुरू कर दिया है और ट्यूटोरियल से पता चलता है कि मैं टूल का उपयोग करके अपना मॉड्यूल बना सकता हूं ताकि ExtUtils::MakeMaker-आधारित परियोजना बनाई जा सके। हालांकि शुद्ध पर्ल परियोजनाओं के लिए, एच 2 एक्स/ईयूएमएम को लंबे समय से Module::Install, Module::Build या Dist::Zilla के पक्ष में अक्षम कर दिया गया है।एक्सएस प्रोजेक्ट बनाने में कौन से टूल्स मदद कर सकते हैं?

क्या एक्सएस परियोजनाओं का निर्माण करने का एक और आधुनिक तरीका है? क्या Module::Starter एक्सएस परियोजनाएं बना सकते हैं? मॉड्यूल :: बिल्ड या जिस्ट :: जिला बिल्ड एक्सएस परियोजनाएं कर सकते हैं? उनके फोड पेज इस मामले पर चुप हैं।

फ्लिप पक्ष पर, क्या एच 2 एक्स/ईयूएमएम पर आधारित आलोचना एक्सएस परियोजनाओं पर लागू होती है? यदि आपको किसी भी संकलक की आवश्यकता है, तो क्या एक मेक टूल भी मांगना उचित है?

संपादित करें: मुझे this question एक प्रोजेक्ट बनाने के बारे में मेरे प्रश्न का उत्तर देता है। मैं अभी भी इमारत के बारे में जानना चाहता हूं: क्या EUMM एकमात्र विकल्प है, या मॉड्यूल :: बिल्ड और डिस्ट :: ज़िला भी एक्सएस बनाने में सक्षम है?

उत्तर

4

यह पता चला है कि मॉड्यूल :: बिल्ड एक्सएस संकलन करने में पूरी तरह से सक्षम है।

use strict; 
use Module::Build; 

my $build = Module::Build->new(
    module_name => 'Chocolate::Belgian', 
    dynamic_config => 1, 
    license  => 'perl', 
    requires  => { 
     'Module::Build' => '0.19', # xs 
     'Test::More' => 0, 
    }, 
    extra_compiler_flags => '-Iinclude', 
    extra_linker_flags => '', 
    c_source  => 'src', 
    needs_compiler => 1, 
    xs_files  => { 
     './Belgian.xs' => 'lib/Chocolate/Belgian.xs', 
    }, 

    ); 

$build->create_build_script; 

यह एक वितरण के साथ .hsrc/ निर्देशिका में include/ निर्देशिका, .c स्रोत फ़ाइलों में (जैसे ppport.h के रूप में) फ़ाइलों में शामिल हैं का निर्माण करेगा, और एक .xs: यहाँ एक पूरा Build.PL मैं एक साथ स्क्रैप करने में कामयाब रहे है प्रोजेक्ट बेस निर्देशिका में Chocolate::Belgian पैकेज के अनुरूप फ़ाइल।

extra_compiler_flags, CCFLAGS बनाने के लिए मेल खाती है, जबकि extra_linker_flagsLIBS से मेल खाती है (ताकि आप सी गणित पुस्तकालय से जोड़ने के लिए -lm वहाँ चाहते हो सकता है)।

+1

चूंकि आप किसी टिप्पणी में प्रतिक्रिया मांग रहे थे: यह त्वरित निरीक्षण के बाद ठीक दिखता है। नाइट्स: शायद ExtUtils पर एक निर्भरता जोड़ें :: सीबीयूल्डर (need_compiler यह पहले से ही कर रहा है)। क्या आप निश्चित हैं कि आपको dynamic_config की आवश्यकता है: 1? मुझे यकीन है कि आप नहीं करते हैं। इसके अलावा, आप आवश्यकता के बजाय config_requires में मॉड्यूल :: बिल्ड जोड़ना चाह सकते हैं। मेरा मानना ​​है कि यह स्वचालित रूप से सबसे हालिया संस्करण पर एक निर्भरता जोड़ता है अगर इसे बिल्कुल नहीं मिलता है। उस पंक्ति को हटाने का प्रयास करें, "./build dist" चलाएं और मॉड्यूल :: बिल्ड के उल्लेख के लिए जेनरेट META.yml/META.json का निरीक्षण करें। – tsee

+0

@tsee: आपकी समीक्षा के लिए बहुत बहुत धन्यवाद। मैंने इसे समुदाय विकी बना दिया है, इसलिए यदि आप चाहें तो आप जो भी बदलाव चाहते हैं उसे डाल सकते हैं। –

+0

हम्म ... मॉड्यूल :: बिल्ड :: एपीआई पेज कहता है कि need_compiler एम :: बी संस्करण .36 के बाद उपलब्ध है, और यदि यह c_source मौजूद है या xs कोड कहीं भी मिलता है तो यह स्वचालित रूप से सत्य पर सेट हो जाता है। यदि सही है, तो यह स्वचालित रूप से ExtUtils :: CBuilder को build_requires आइटम के रूप में जोड़ता है। –

2

जिला :: जिला नहीं EUMM या मॉड्यूल के लिए एक स्थानापन्न :: निर्माण है, यह क्या होगा उत्पन्न है एक Makefile.Pl (आदि) आप के लिए, मैं सुनने के लिए यह ऐसा नहीं कर सकते कि आश्चर्य नहीं होगा एक एक्सएस परियोजना के लिए, लेकिन एक डीजीआई परियोजना के लिए अपने आप को प्रबंधित करने के तरीके हैं। यह Makefile.Pl के साथ काम कर सकता है (यह Build.pl) प्रदान किया जाता है।

तो आपके प्रश्न के जिस्ट :: ज़िला भाग पर मेरा उत्तर है, जिस्ट :: जिला एक परियोजना में उस भूमिका को भरता नहीं है।

+1

इसके लिए धन्यवाद, इसने मेरे दिमाग में डीजीएल को काफी स्पष्ट किया है। जांच और आगे जिला :: जिला :: प्लगइन :: मेकमेकर :: अद्भुत है जो आंशिक एक्सएस क्षमता का दावा करता है। –

1

मैं हमेशा शुरुआती बिंदु के रूप में कुछ काफी सरल एक्सएस वितरण का उपयोग करता हूं। एच 2 एक्स कुछ शीर्षकों को पार्सिंग करके एक्सएस पीढ़ी कर सकता है, लेकिन ज्यादातर समय, मैंने पाया कि यह भी उपयोगी होने तक सीमित है।

यदि आप सी ++ को लपेटने की योजना बना रहे हैं, तो आप मॉड्यूल :: बिल्ड :: WithXSpp पर एक नज़र डालना चाहेंगे।

+0

आपके उत्तर के लिए धन्यवाद। आप अपना वितरण बनाने के लिए क्या उपयोग करते हैं? –

+1

मैंने मेकमेकर का उपयोग करना शुरू कर दिया क्योंकि यह सबसे आसान लग रहा था। आजकल, मैं आमतौर पर मॉड्यूल :: बिल्ड का उपयोग करता हूं (जो, मैं कहूंगा, एक्सएस/सी सामान के लिए एक सीखने की वक्र है) क्योंकि मुझे लगता है कि यह मेकफ़ाइल हैक किए बिना मुझे अधिक लचीलापन देता है। मॉड्यूल :: बिल्ड :: WithXSpp में पागल जादू करने के लिए विस्तार करना भी काफी आसान था। – tsee

+0

क्या आप एक्सएस के लिए एक मॉड्यूल :: बिल्ड उदाहरण प्रदान कर सकते हैं या मेरे उत्तर में एक की समीक्षा कर सकते हैं? मैं इसके लिए नया हूं और मैं एक्सएस परियोजनाओं के निर्माण के लिए सर्वोत्तम प्रथाओं को खोजने की कोशिश कर रहा हूं। –

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