Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 我如何与阴谋集团建立一个简单的项目?_Haskell_Makefile_Cabal - Fatal编程技术网

Haskell 我如何与阴谋集团建立一个简单的项目?

Haskell 我如何与阴谋集团建立一个简单的项目?,haskell,makefile,cabal,Haskell,Makefile,Cabal,Haskell wiki声明您应该使用Cabal作为构建系统。然而,在我看来,它更倾向于生成包,而不仅仅是构建二进制文件。基本上,我所要做的就是将src/目录中的每个*.hs文件构建到bin/中一个单独的二进制文件中。这个makefile很好地完成了这一点,但我想了解阴谋集团,这似乎是一个很好的例子,让我开始: GHC = ghc GHCFLAGS = -outputdir bin SRC = $(wildcard src/*.hs) BIN = $(patsubst src/%.hs,%,$(

Haskell wiki声明您应该使用Cabal作为构建系统。然而,在我看来,它更倾向于生成包,而不仅仅是构建二进制文件。基本上,我所要做的就是将src/目录中的每个*.hs文件构建到bin/中一个单独的二进制文件中。这个makefile很好地完成了这一点,但我想了解阴谋集团,这似乎是一个很好的例子,让我开始:

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

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

bin/%: src/%.hs
    $(GHC) $(GHCFLAGS) $< -o $@

clean:
    rm bin/*
GHC=GHC
GHCFLAGS=-outputdir bin
SRC=$(通配符SRC/*.hs)
BIN=$(patsubst src/%.hs,%,$(src))
全部:$(addprefix bin/,$(bin))
bin/%:src/%.hs
$(GHC)$(GHCFLAGS)$<-o$@
清洁:
垃圾箱/*

最简单的入门方法是让Cabal为您生成一个
.Cabal
文件,作为起点。要执行此操作,请进入项目目录并键入

$ cabal init
然后它会问你一些关于你的包裹的问题。有些问题,如作者姓名和电子邮件,只有当你打算将你的软件包上传到Hackage时才真正重要,所以如果你想的话,你可以将这些问题留空。完成此操作后,您可以编辑
.cabal
文件以对其进行自定义。生成的文件将包含一组注释,这些注释将帮助您开始。之后,只需键入

$ cabal configure
$ cabal build

默认情况下,二进制文件将被放置在
/dist/build/

谢谢,这是一个很好的开始。然而,运行cabalconfigure时会显示:
错误:找不到可执行TestProject
的“Main Is”字段,可能是因为我没有在TestProject.cabal中指定一个字段。但由于我试图构建几个可执行文件,每个文件都有自己的
main
,我真的不知道该怎么办。@Psirus:您需要为正在构建的每个可执行文件创建一个
Executable
节。然后,可以在每个字段中设置
Main Is
字段。如果您在生成文件时选择了“可执行文件”,那么应该有一个可以复制到文件中的示例。感谢您在这里帮助我。这也是可行的,但我更喜欢“通配符”版本,这样我就不必一遍又一遍地写基本相同的东西。还有,但这只是一个小问题,我可以将所有可执行文件都放在同一个目录中吗?@Psirus“通配符”版本现在可能看起来很简单,但它似乎是一种稍后会回来咬你的东西。(例如,当您决定编写一个
Utils.hs
,其中包含所有可执行文件使用的一些方便的函数时,会发生什么情况?)对于第二个问题:是的,您可以将所有可执行文件放在同一个目录中;什么在阻止你?@DanielWagner谢谢你的建议,当我开始一个“合适”的项目时,我会记住这一点。至于“如果我编写一个所有可执行文件都使用的
Utils.hs
,会发生什么情况”,这在Makefile中应该是可能的,所以我希望在Cabal中也是可能的?另外,一次又一次地复制和粘贴同一件东西,难道不违背“不要重复你自己”的原则吗?