在haskell构建系统中,Cabal
以及runhaskell
拥有几乎相同的子命令集configure
,build
。对于runhaskell,它是:
runhaskell Setup.hs configure
runhaskell Setup.hs build
...而对于cabal来说:
cabal build
cabal configure
那么,我什么时候应该使用哪个命令?这两个命令是否具有相同的功能?
我是否可以在没有sudo访问权限的情况下运行runhaskell
,因为我看到runhaskell
在/opt/ghc/7.8.4/lib
内输入,而cabal在sudo / non-sudo模式下工作?
答案 0 :(得分:5)
cabal
和runhaskell
用于完全不同的目的。
runhaskell
用于执行没有的Haskell程序
需要编译它们。您可以将它放在Haskell文件的顶部:#!/usr/bin/env runhaskell
并赋予它脚本编写能力。 cabal
是包管理器和构建系统
对于Haskell。
同样cabal
和runhaskell
不要共享他们的子命令,例如
configure
,build
,install
等。
我在这个链接中看到bob.ippoli.to/archives/2013/01/11/getting-started-with-haskell,正在使用两个命令... runhaskell Setup.hs configure&& runhaskell Setup.hs build
从Setup.hs
:
cabal init
通常会生成以下代码
import Distribution.Simple
main = defaultMain
现在,如果您看到defaultMain的实施:
defaultMain :: IO ()
defaultMain = getArgs >>= defaultMainHelper simpleUserHooks
所以你传递的实际上是命令行参数,可以是任何东西。事实上,你可以自己测试一下:
$ runhaskell Setup.hs invalid_argument
unrecognised command: invalid_argument (try --help)
答案 1 :(得分:2)
runhaskell
没有任何子命令:
$ runhaskell --help
用法:runghc [runghc flags] [GHC flags]模块[program args]
它需要一个Haskell源文件的路径并立即执行它。因此,当你想要的只是运行一些Haskell代码时,你应该使用它。当然,您可以在没有超级用户访问权限的情况下使用runhaskell
;我怀疑它在/opt
中创造了什么。
Cabal是Haskell项目的构建系统,其目的是将Haskell源代码转换为二进制文件。