有没有类似于`cabal run`的`stack run`?

时间:2016-01-17 18:59:26

标签: haskell stackage

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

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文件中第一个executable条目的cabal / stack?或许我们可以用sed ...

来做到这一点

3 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:10)

您可以使用--exec告诉堆栈成功构建后应运行的程序:

256*256*256

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

stack build --exec <executable-name>

由于stack unpack pandoc && cd pandoc* stack build --exec "pandoc --version" cabal run标志都需要可执行名称,因此可能与stack exec进行比较的距离最近。但是,最干净的变体是额外的--exec命令,stack-run。该项目的GitHub问题跟踪器可能值a feature request

答案 2 :(得分:8)

我有很好的使用经验:

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

编辑2018-04-05:Relevant stack issue

旧答案:

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

#/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