堆栈:编译独立源文件

时间:2018-04-08 12:21:31

标签: haskell haskell-stack

安装Stack后,您可以使用它为您安装GHC。太好了!

...现在如何用它编译文件?

要明确:所谓要做的是编写一个包规范并使用Stack构建。但肯定有一种方法可以在该项目中轻松编译一个小帮助文件?构建一个完整的项目似乎很愚蠢,因此我可以构建一个小的帮助程序,并且可以从shell中轻松运行。

我知道我可以使用Stack 运行任何Haskell文件。但我不能为我的生活弄清楚如何编译这件事......

1 个答案:

答案 0 :(得分:3)

您可以使用stack ghc -- <file names>来编译和链接一组文件(在Stack's user guide中简要提及):

  

您有时希望只编译(或运行)单个Haskell源文件,而不是为其创建整个Cabal包。您可以使用stack exec ghcstack exec runghc。作为简单的帮助者,我们还针对这些常见情况提供了 stack ghc stack runghc命令。

--是为了确保我们传递的参数被发送到ghc,而不是被解析为stack exec的参数。这与尝试将参数传递给您使用普通堆栈工具链创建的可执行文件时的情况相同:stack exec myExe -foo-foo传递给exec,而不是myExe,{{ 1}}表现得很好。

例如:

Bar.hs

stack exec myExe -- -foo

Foo.hs

module Bar where

bar :: Int
bar = 5

编译(甚至不需要在构建文件中指定import Bar main :: IO () main = print bar ,它是自动获取的):

Bar.hs

依赖项也没有问题 - 看起来本地安装的所有软件包都可用于构建(您可以使用> stack ghc -- Foo.hs [1 of 2] Compiling Bar ( Bar.hs, Bar.o ) [2 of 2] Compiling Main ( Foo.hs, Foo.o ) Linking Foo ... > ./Foo 5 containers而无需任何其他构建参数。)