2012-02-15 76 views
6

Haskell wiki指出你应该使用Cabal作为你的构建系统。然而,在我看来更多的是制作软件包,然后只是构建二进制文件。基本上,我想要做的就是将我的src /目录中的每个* .hs文件构建成bin /中的一个单独的二进制文件。这个Makefile完成这个很好,但我想了解惊天动地,这似乎是一个很好的例子,让我开始:如何使用Cabal构建简单的项目?

GHC = ghc 
GHCFLAGS = -outputdir bin 
SRC = $(wildcard src/*.hs) 
BIN = $(patsubst src/%.hs,%,$(SRC)) 

all: $(addprefix bin/, $(BIN)) 

bin/%: src/%.hs 
    $(GHC) $(GHCFLAGS) $< -o [email protected] 

clean: 
    rm bin/* 

回答

8

最简单的方式开始是有惊天动地产生.cabal文件给你,你可以用作起点。要做到这一点,进入你的项目目录并键入

$ cabal init 

然后它会问你一堆关于你的软件包的问题。如果你计划将你的软件包上传到Hackage,那么诸如作者姓名和电子邮件等问题就非常重要,所以如果你愿意,你可以留下这些空白。完成之后,您可以编辑.cabal文件进行自定义。生成的文件将包含一堆评论,这些评论可以帮助你开始。之后,只需键入

$ cabal configure 
$ cabal build 

二进制将默认放置在./dist/build/<name>/

+1

谢谢,这是一个不错的开始。然而,运行cabal配置说:'错误:没有找到可执行TestProject'的Main-Is'字段,可能是因为我没有在TestProject.cabal中指定一个字段。但是因为我正在尝试构建多个可执行文件,每个文件都有自己的'main',所以我不知道该怎么做。 – Psirus 2012-02-15 20:30:46

+1

@Psirus:您需要为每个可执行文件创建一个“可执行文件”部分。然后你可以在每个中设置Main-Is字段。如果您在生成文件时选择了“可执行文件”,则应该有一个示例可以在文件中复制。 – hammar 2012-02-15 20:32:07

+0

谢谢你在这里帮助我。这也适用,但我更喜欢“通配符”版本,这样我就不必一遍又一遍地写出基本相同的东西。另外,但这只是次要的,我可以在同一个目录中拥有所有可执行文件吗? – Psirus 2012-02-15 20:41:42

相关问题