19

直到最近,我一直在执行这个美丽来构建 + 运行一个带有堆栈的项目:

stack build && .stack-work/install/x86_64-linux/lts-4.1/7.10.3/bin/<project-name>

我在 IRC 上被告知这可以简化为

stack build && stack exec <project-name>

这是否可以进一步简化,以

stack run

或者至少

stack run <project-name>

?

如果我没记错的话,这是可能的cabal run

编辑:

@haoformayor 的评论越来越接近:

alias b='stack build --fast --ghc-options="-Wall" && stack exec'

虽然这仍然需要项目名称,对吧?

我也开始接近

function stack-run () { stack build && stack exec `basename "$PWD"` }

尽管这仅在项目名称与文件夹名称匹配时才有效。也许我们可以查询 cabal/stack 以获取executable.cabal 文件中的第一个条目?或者也许我们可以用sed......

4

3 回答 3

13

正如这里提到的http://docs.haskellstack.org/en/stable/README.html#quick-start-guide,您可以使用stack exec my-project-exewheremy-project-exe是 .cabal 文件中可执行文件的名称。

于 2016-01-17T19:09:22.080 回答
10

您可以--exec用来告诉堆栈在成功构建后应该运行什么程序:

stack build --exec <executable-name>

您还可以为可执行文件指定参数,例如

stack unpack pandoc && cd pandoc*
stack build --exec "pandoc --version"

与 相比,这可能是最接近的cabal run,因为两者stack exec--exec标志都需要一个可执行名称。然而,最干净的变体将是一个额外的stack-run命令,即stack build --exec <first-executable in .cabal>. 在项目的 GitHub 问题跟踪器上提出功能请求可能是值得的。

于 2016-01-17T21:39:36.790 回答
9

我有很好的使用经验:

https://hackage.haskell.org/package/stack-run


编辑 2018-04-05:相关堆栈问题


老答案:

这就是我现在最终要做的事情。

#/usr/bin/env sh

stack build && stack exec `basename "$PWD"` "$@"

我已将以下内容放入名为stack-run我的$PATH. ~/.local/bin/stack-run就我而言。

这让我

$ stack-run

在任何目录中,甚至

$ stack run

由于在我的几乎所有项目中,项目的可执行文件都与文件夹同名,因此可以正常工作。但我希望通过支持不同的名称来扩展它。


编辑 2016-09-26:我也发现了这个,但还没有尝试过: https ://hackage.haskell.org/package/stack-run

于 2016-01-30T21:38:00.160 回答