代码之家  ›  专栏  ›  技术社区  ›  MathematicalOrchid

堆栈:编译独立源文件

  •  7
  • MathematicalOrchid  · 技术社区  · 6 年前

    一旦安装了Stack,就可以使用它为您安装GHC。太棒了

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

    要明确的是:你是什么 假定的 要做的是编写一个包规范并让堆栈构建它。但肯定有一种方法可以在该项目中简单地编译一个很小的助手文件?必须构建一个完整的项目,这样我才能构建一个很小的助手程序,并且可以从shell轻松地运行它,这似乎很愚蠢。

    我知道我可以 使用堆栈的任何Haskell文件。但我一辈子都不知道该怎么做 编写 事情。。。

    1 回复  |  直到 6 年前
        1
  •  10
  •   hnefatl    6 年前

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

    有时,您可能只想编译(或运行)一个Haskell源文件,而不是为其创建一个完整的Cabal包。您可以使用 stack exec ghc stack exec runghc 为此。作为简单的助手,我们还提供 stack ghc stack runghc 命令,用于这些常见情况。

    这个 -- 是为了确保我们传递的参数被发送到 ghc ,而不是被解析为 stack exec 。这与尝试将参数传递给使用普通堆栈工具链创建的可执行文件时的情况相同: stack exec myExe -foo 通行证 -foo exec myExe ,则, stack exec myExe -- -foo 行为符合要求。


    例如:

    酒吧hs公司

    module Bar where
    
    bar :: Int
    bar = 5
    

    富。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
    

    依赖项也没有问题-看起来本地安装的所有包都可用于构建(您可以使用 containers QuickCheck 没有任何其他生成参数)。