2010-02-05 13 views
9

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

मैं कुछ बुनियादी नियमों (ocaml_lib पर कॉल करके, मैं कुछ अन्य समय ओकंप्लिंड का उपयोग करूंगा) के साथ मायोकाम्बिल्ड को संशोधित करके बाहरी परियोजनाओं को सफलतापूर्वक शामिल करने में सक्षम था, लेकिन मैं इस परियोजना में मॉड्यूल के रूप में फ़ोल्डर को सही तरीके से कैसे शामिल करना है, इस पर अटक गया हूं । मैंने parser.mlpack फ़ाइल बनाई और इसे शामिल करने के लिए उचित मॉड्यूल के साथ भर दिया (उदाहरण के लिए, "पार्सर/डेट", एट कैटेरा) ने parser.mli को उनके कार्यान्वयन के लिए निर्देशिका की जड़ में लिखा, और _tags फ़ाइल को संशोधित किया (नीचे देखें) ।

संकलन के दौरान, पार्सर निर्देशिका ठीक से घुमाया जाता है, और parser.cmi, parser.mli.depends दोनों _build निर्देशिका में बनाए गए थे; साथ ही पार्सर्स उपनिर्देशिका में सभी *.cm[xio] फ़ाइलें।

मुझे लगता है कि मैं कुछ अनावश्यक कर रहा हूं, लेकिन इस पर ध्यान दिए बिना, परियोजना अभी भी संकलित करते समय पार्सर मॉड्यूल नहीं पा रहा है!

धन्यवाद!

_tags

debug : true 
<*.ml> : annot 
"parser" : include 
<parser/*.cmx>: for-pack(Parser) 
<curlIO.*> : use_curl 
<mySQL.*> : use_mysql 
<**/*.native> or <**/*.byte> : use_str,use_unix,use_curl,use_mysql 

संकलन त्रुटि

/usr/local/bin/ocamlopt.opt unix.cmxa str.cmxa -g -I /usr/local/lib/ocaml/site-lib/mysql mysql.cmxa -I /usr/local/lib/ocaml/curl curl.cmxa curlIO.cmx utilities.cmx date.cmx fraction.cmx logger.cmx mySQL.cmx data.cmx project.cmx -o project.native 
File "\_none\_", line 1, characters 0-1: 
Error: **No implementations provided for the following modules:** 
     Parser referenced from project.cmx 
Command exited with code 2. 

आप देखेंगे -I parser ऊपर जोड़ने चरण में शामिल नहीं है; वास्तव में पार्सर संबंधित फाइलों में से कोई भी शामिल नहीं है!

संपादित करें: टिप्पणियों और नीचे दिए गए उत्तर से नए विवरण जोड़े गए।

उत्तर

3

मुझे आश्चर्य है कि parser.mli किसी भी तरह से mlpack फ़ाइल को संसाधित करने में निर्भरताओं में हस्तक्षेप कर रहा है। पैक ऑपरेशन से उत्पन्न होगा जब parser.mlpack संसाधित और संकलित किया जाएगा। parser.mli फ़ाइल को हटाकर निकालने का प्रयास करें। यदि यह काम करता है, तो इसे वास्तविक उत्तर में फिर से संसाधित किया जा सकता है।

इसके अलावा, आप parser.mlpack में अपने मॉड्यूल के लिए एक उपसर्ग के रूप parser/ की जरूरत नहीं है अगर parser.mlpackparser निर्देशिका में है और आप include टैग सेट है। लेकिन इससे इसके लिए कोई फर्क नहीं पड़ना चाहिए।

अद्यतन: यह समस्या के आसपास काम करता था, लेकिन मूल कारण नहीं था। रूट कारण, नीचे प्रति टिप्पणी, .mlpack में उल्लिखित एक फ़ाइल थी जिसे स्थानांतरित किया गया था।

+0

हां, यह काम किया, लेकिन इसका इरादा नहीं है। निर्देशिका की सामग्री का प्रतिनिधित्व करने वाला एक मॉड्यूल नहीं बनाया गया था; वे सीधे submodules द्वारा संदर्भित हैं। संकलन के दौरान '-pack' तर्क उचित मॉड्यूल में जोड़ा जाता है। लेकिन अंतिम उत्पाद में उपयोग नहीं किया जाता है। क्या मेरी व्याख्या -पैक गलत है? – nlucaroni

+0

'-pack' को एक मॉड्यूल बनाना चाहिए जिसमें अन्य मॉड्यूल submodules के रूप में हों। फिर आपका अन्य कोड उन्हें उनके submodules के रूप में संदर्भित करना चाहिए (उदा। 'पार्सर। कॉनफर्सर'); यदि यह कभी उन्हें सीधे संदर्भित करता है (केवल 'कन्फपार्सर' बिना 'ओपन'िंग' पार्सर 'के पहले), तो चीजें गड़बड़ हो जाएंगी। क्या आपके पास 'parser.mli' नहीं होने पर' -verbose' आउटपुट पोस्ट कर सकता है? –

+1

मैंने parser.mli फ़ाइल को वापस जोड़ा। मुझे लगता है कि किसी कारण से पैक को संकलित करते समय एक त्रुटि को तोड़ना नहीं था जहां इसे करना चाहिए। ** मेरी 'mlpack' फ़ाइल में एक अतिरिक्त मॉड्यूल था जिसे मैंने ** स्थानांतरित कर दिया था। – nlucaroni

4

आपको खोज पथ में पार्सर निर्देशिका "शामिल" करने की आवश्यकता है। आप _tags में ऐसा कर सकते हैं:

"parser": include 

फिर ocamlbuild दिलचस्प फ़ाइलों के लिए पार्सर निर्देशिका खोज सकते हैं।

+1

निश्चित रूप से होना चाहिए -> "पार्सर": – ygrek

+0

@ygrek धन्यवाद - अपडेट किया गया। –

+0

... मैंने ऊपर अपना प्रश्न संशोधित किया। इससे मदद मिली, लेकिन मैं वास्तव में यह पहले से ही कर रहा था, लेकिन '-आई पार्सर' के साथ कमांड लाइन पर समानता से। अब, मैं सिर्फ 'ओकम्बुल्ड परियोजना' के साथ निर्माण करता हूं। ' – nlucaroni

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