2013-01-09 9 views
16

निम्नलिखित परियोजना संरचना के साथ निर्माण:एकल परियोजना से कई निष्पादनयोग्य

src/FirstExecutable.hs 
src/SecondExecutable.hs 
my-amazing-project.cabal 

और निम्नलिखित कबाल स्थापना:

name:    my-amazing-project 
version:   0.1.0.0 
build-type:   Simple 
cabal-version:  >=1.8 

executable first-executable 
    hs-source-dirs: src 
    main-is:   FirstExecutable.hs 
    ghc-options:  -O2 -threaded -with-rtsopts=-N 
    build-depends: base == 4.5.* 

executable second-executable 
    hs-source-dirs: src 
    main-is:   SecondExecutable.hs 
    ghc-options:  -O2 -threaded -with-rtsopts=-N 
    build-depends: base == 4.5.* 

cabal install चल रहा है निम्न उत्पादन के साथ विफल रहता है:

Installing executable(s) in 
/Users/mojojojo/Library/Haskell/ghc-7.4.2/lib/my-amazing-project-0.1.0.0/bin 
cabal: dist/build/second-executable/second-executable: does not exist 
Failed to install my-amazing-project-0.1.0.0 
cabal: Error: some packages failed to install: 
my-amazing-project-0.1.0.0 failed during the final install step. The exception 
was: 
ExitFailure 1 

मैं क्या गलत कर रहा हूं या यह एक Cabal बग है?


निष्पादन योग्य मॉड्यूल की सामग्री को इस प्रकार हैं:

module FirstExecutable where 

main = putStrLn "Running FirstExecutable" 

और

module SecondExecutable where 

main = putStrLn "Running SecondExecutable" 
+0

यह मेरे लिए काम करता है कुछ हो सकता है। – Satvik

+0

@ सत्त्विक मैंने अभी समाधान ढूंढ लिया है। इसे –

+2

पोस्ट करना आपको निष्पादन योग्य में 'मॉड्यूल ..' का उपयोग नहीं करना चाहिए। या आप 'मॉड्यूल मेन' – Satvik

उत्तर

19

कबाल उम्मीद निष्पादन के मॉड्यूल Main किया जाना है। आपको मॉड्यूल लाइन को छोड़ना चाहिए या module Main where का उपयोग करना चाहिए।

ठीक है यहां संभावित कारण है। जब आप वास्तव में प्रोग्राम को संकलित करते हैं तो मॉड्यूल Main नहीं है जब एक हैकेल प्रोग्राम का निष्पादन योग्य नहीं होता है। mainMain मॉड्यूल का फ़ंक्शन निष्पादन योग्य होने पर उपयोग किया जाता है। Ghc के लिए एक संभावित समाधान -main-is ध्वज है। तो अगर आप की तरह

name:    my-amazing-project 
version:   0.1.0.0 
build-type:   Simple 
cabal-version:  >=1.8 

executable first-executable 
    hs-source-dirs: src 
    main-is:   FirstExecutable.hs 
    ghc-options:  -O2 -threaded -with-rtsopts=-N -main-is FirstExecutable 
    build-depends: base == 4.5.* 

executable second-executable 
    hs-source-dirs: src 
    main-is:   SecondExecutable.hs 
    ghc-options:  -O2 -threaded -with-rtsopts=-N -main-is SecondExecutable 
    build-depends: base == 4.5.* 
+1

हां का उपयोग कर सकते हैं हां, यह वही है जो मुझे गलती से कुछ घंटों खर्च करने और खुद को मारने के बाद दुर्घटना से पता चला है। काफी स्पष्ट रूप से मैं निराश हूं कि उन्होंने इस तरह के भ्रमित व्यवहार का चयन क्यों किया। एक भयानक डिजाइन निर्णय आईएमओ –

+4

@ निकितावोल्कोव यह व्यवहार [भाषा मानक] (http://www.haskell.org/onlinereport/modules.html) द्वारा अनिवार्य है - "एक हास्केल प्रोग्राम मॉड्यूल का संग्रह है, जिसमें से एक, सम्मेलन द्वारा, मुख्य कहा जाना चाहिए और मूल्य मुख्य निर्यात करना चाहिए। " –

+0

@NikitaVolkov आप अपडेट किए गए उत्तर में सुझाए गए संभावित कार्यवाही को देख सकते हैं। – Satvik

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