首页 文章

堆栈:编译独立源文件

提问于
浏览
3

一旦安装了Stack,就可以使用它为您安装GHC . 大!

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

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

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

1 回答

  • 3

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

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

    -- 是为了确保我们传递的参数被发送到 ghc ,而不是被解析为 stack exec 的参数 . 它是's the same thing as when trying to pass arguments to an executable you'使用普通堆栈工具链: stack exec myExe -foo-foo 传递给 exec ,而不是 myExestack exec myExe -- -foo 按需要运行 .


    例如:

    Bar.hs

    module Bar where
    
    bar :: Int
    bar = 5
    

    Foo.hs

    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
    

    依赖项也没有问题 - 看起来本地安装的所有软件包都可用于构建(您可以使用 containersQuickCheck 而无需任何其他构建参数) .

相关问题