2012-01-19 50 views
5

我在Unix下創建了一個項目的一些文件,它們很多,如果我想在另一個pc或文件夾中執行它,我需要將所有文件複製到那裏。他們全部連接在進口。 我如何製作一個可執行的haskell程序?編譯Haskell的多個.hs文件 - Unix

我每例如:

main.hs - main where all the program executes; using,besides haskell, unix shell. 
ex1.hs - basically types of data, some functions. 
ex2.lhs - same as ex1.lhs but is literate with LaTeX 
pic.jpg - picture to use on the pdflatex 
package.sty - package needed to use some functions 

如何進行,編譯所有的這些?

>ghc -o MAIN main.hs ex1.hs ex2.lhs pic.jpg package.sty 

Failed to load interface for 'ex1.hs' ,是具有進口ex1.hs

好奇的是,如果我換進口ex1.hs到行: 我使用GHC但總是給人錯誤的嘗試import ex2.lhs line會報錯ex2

+1

你的意思是_ghc_? –

+1

如何編譯'.jpg'或'.sty'文件?它應該嵌入到可執行文件中嗎? – dflemstr

+0

是的,我需要它導致程序創建一個pdf,我需要該JPG和麥粒腫是一個包 – MrFabio

回答

9
  1. 哈斯克爾模塊名稱必須以大寫字母開頭,所以通過重命名ex1.hsex2.hsEx1.hsEx2.hs啓動。他們也應該從module Ex1 where開始,否則模塊名稱將默認爲Main,當模塊名稱與文件名稱不匹配時,GHC將非常困惑。

  2. 導入語句應該引用模塊名稱,而不是文件名,所以將它們改爲main.hs以對應模塊名稱。

    import Ex1 
    import Ex2 
    
  3. 現在有了ghc --make main.hs編譯,它會自動尋找其他模塊。它將搜索帶有.hs.lhs擴展名的模塊,並正確處理後者,如識字Haskell文件。

對於較大的項目,你應該考慮使用Cabal,大多數Haskell的庫和程序使用的生成系統。它將有助於管理依賴和編譯選項,有點像Makefile。

+0

我完全正確的名稱,使用_ghc --make main.hs_作品,但它使.o文件和圖片不編譯。 那我該如何執行它?因爲_./main.o_或_./main_將不起作用 – MrFabio

+0

@GoodGuyGreg:假設編譯成功,'。/ main'應該可以工作。我對編譯圖片部分感到困惑。你在說LaTeX彙編嗎? – hammar

+0

是的,它編譯一個函數的PDF,但如果它是不可能編譯一個JPG,我可以刪除它沒有問題,但問題是當我編譯我讓.o文件導入每個.hs和.lhs導入主。 hs和./main表示它不存在 – MrFabio

3

試試

ghc --make main.hs

這應該使GHC試圖盡一切可能......