【问题标题】:How do I build a simple project with Cabal?如何使用 Cabal 构建一个简单的项目?
【发布时间】:2012-02-15 19:50:49
【问题描述】:

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 $@

clean:
    rm bin/*

【问题讨论】:

    标签: haskell makefile cabal


    【解决方案1】:

    最简单的入门方法是让 Cabal 为您生成一个 .cabal 文件,您可以将其用作起点。为此,请进入您的项目目录并输入

    $ cabal init
    

    然后它会问你一堆关于你的包裹的问题。一些问题,如作者姓名和电子邮件,只有在您计划将您的包上传到 Hackage 时才真正重要,所以如果您愿意,可以将这些留空。完成此操作后,您可以编辑 .cabal 文件以对其进行自定义。生成的文件将包含一堆可以帮助您入门的 cmets。之后,只需输入

    $ cabal configure
    $ cabal build
    

    二进制文件默认放置在./dist/build/&lt;name&gt;/

    【讨论】:

    • 谢谢,这是一个不错的开始。但是,运行 cabal configure 会显示:Error: No 'Main-Is' field found for executable TestProject,大概是因为我没有在 TestProject.cabal 中指定一个。但由于我正在尝试构建几个可执行文件,每个都有自己的 main 我真的不知道该怎么做。
    • @Psirus:每个正在构建的可执行文件都需要一个 Executable 部分。然后,您可以在每个字段中设置 Main-Is 字段。如果你在生成文件的时候选择了“executable”,那么文件中应该有可以复制的例子。
    • 感谢您在这里帮助我。这也有效,但我更喜欢“通配符”版本,这样我就不必一遍又一遍地写基本相同的东西。另外,但这只是次要的,我可以将所有可执行文件放在同一个目录中吗?
    • @Psirus “通配符”版本现在可能看起来很简单,但它似乎是一种稍后会回来咬你的东西。 (例如,当您决定编写一个Utils.hs 并包含所有可执行文件使用的一些方便的功能时会发生什么?)对于第二个问题:是的,您可以将所有可执行文件放在同一个目录中;是什么阻止了你?
    • @DanielWagner 感谢您的建议,当我开始一个“合适的”项目时,我会牢记这一点。至于“如果我编写所有可执行文件都使用的Utils.hs 会发生什么”,这应该可以通过 Makefile 实现,所以我希望 Cabal 也可以实现?此外,一遍又一遍地复制和粘贴相同的内容不会违反“不要重复自己”的原则吗?
    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多