2009-09-11 14 views
34

ghc --make foo.hs के माध्यम से एक हैकेल स्रोत फ़ाइल को संकलित करते समय जीएचसी हमेशा foo.exe के अलावा विभिन्न इंटरमीडिएट फ़ाइलों के पीछे छोड़ देता है। ये foo.hi और foo.o हैं।इंटरमीडिएट फाइलें उत्पन्न करने से जीएचसी को कैसे रोकें?

मैं अक्सर फ़ोल्डर्स को अव्यवस्थित करने से बचने के लिए .hi और .o फ़ाइलों को हटाने के लिए समाप्त होता हूं।

क्या जीएचसी के लिए अपनी इंटरमीडिएट फाइलों को पीछे नहीं छोड़ने के लिए कमांड लाइन विकल्प है? (जब # हास्केल पर पूछा गया, तो मुझे सबसे अच्छा जवाब मिला ghc --make foo.hs && rm foo.hi foo.o

उत्तर

30

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

हालांकि, आपको लगता है कि setting the -outputdir option आपकी मदद करेगा ; जो आपकी सभी ऑब्जेक्ट फ़ाइलों (.o), इंटरफ़ेस फ़ाइलों (.hi), और निर्दिष्ट निर्देशिका में एफएफआई स्टब फ़ाइलों को रखेगा। यह अभी भी "अव्यवस्था" है, लेकिन कम से कम यह आपकी कार्यशील निर्देशिका में नहीं है।

+0

मुझे पता है कि यह सवाल पुराना है लेकिन यह टिप बहुत आसान है। मैंने ghc के लिए अपने '।/Zshrc' में एक उपनाम जोड़ा है ताकि सभी इंटरमीडिएट फ़ाइलों को फ़ोल्डर में हर बार जब मैं कमांड लाइन – djhworld

+1

से ghc चलाता हूं, जब मैं कैबल का उपयोग नहीं करता, तो मैं आमतौर पर एक मेकफ़ाइल लिखता हूं (यहां तक ​​कि विंडोज़ पर भी), जैसा कि उल्लेख किया गया है, '-outputdir' सेट करें, और इसे मेकफ़ाइल के भीतर से स्वचालित रूप से हटा दें। – MasterMastic

+1

मुझे एक शेल स्क्रिप्ट लिखना भी आसान लगता है। चूंकि मेरा इरादा सिर्फ एक प्रोग्राम का परीक्षण करने के लिए था, मैंने अभी 'gh.ch' लिखा' ghc program.hs -outputdir dist && ./program && rm प्रोग्राम && rm -rf dist/' – lucasarruda

15

मेरा सामान्य वर्कफ़्लो सीधे ghc के बजाय कैबल का उपयोग करना है। यह outputdir विकल्प को उचित बिल्ड फ़ोल्डर में सेट करता है और आपके लिए हैडॉक दस्तावेज़ बनाने जैसी चीजें कर सकता है। आपको बस अपनी परियोजना के लिए .cabal फ़ाइल को परिभाषित करना है और फिर सीधे ghc चलाने के बजाय कैबल इंस्टॉल या कैबल बिल्ड करना है। चूंकि आपको अंत में इस प्रक्रिया का पालन करने की आवश्यकता है, यदि आप कभी भी अपना काम हैकेज पर साझा करना चाहते हैं, तो इसमें शामिल होने का एक अच्छा अभ्यास है और यह पैकेज निर्भरताओं को प्रबंधित करने में भी मदद करता है।

+1

यही है जो मैं करता हूं। हास्केल कोड के प्रत्येक टुकड़े के लिए जो एक फ़ाइल से बड़ा है, मैं एक .cabal फ़ाइल सेट करता हूं। यही है, मैं बस एक मौजूदा। कैबल फ़ाइल को कहीं से कॉपी करता हूं और इसे संशोधित करता हूं। मुझे लगता है कि कोई डिफॉल्ट वर्किंग स्पेस सेट करने के लिए 'cabal --init' कमांड पर काम कर रहा है, जो काफी उपयोगी होगा। –

+0

मैं हास्केल के लिए बिल्कुल नया हूं, लेकिन ऐसा कुछ है जो मुझे वास्तव में कैबल के बारे में पसंद है। कैबल एक निर्देशिका (dist) बनाता है और इमारत के दौरान उस निर्देशिका में सभी आउटपुट-फाइलों को रखता है। यह अन्य निर्देशिकाओं को साफ रखता है। – davidbe

6

आप सोचते हैं, -hidir/dev/null, मुझे लगता है, उन्हें वहां भेजना। साथ ही, सामान्य रूप से -फनो-कोड विकल्प बहुत सारे आउटपुट को बंद कर देता है। आप बस Cabal का उपयोग करना चाहते हैं।

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