2012-01-19 48 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试图尽一切可能......