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

Wiz*_*zek 15 haskell stackage

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

stack build && .stack-work/install/x86_64-linux/lts-4.1/7.10.3/bin/<project-name>
Run Code Online (Sandbox Code Playgroud)

IRC告诉我,这可以简化为

stack build && stack exec <project-name>
Run Code Online (Sandbox Code Playgroud)

这可以进一步简化

stack run
Run Code Online (Sandbox Code Playgroud)

或至少

stack run <project-name>
Run Code Online (Sandbox Code Playgroud)

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

编辑:

@ haoformayor的评论越来越近了:

alias b='stack build --fast --ghc-options="-Wall" && stack exec'
Run Code Online (Sandbox Code Playgroud)

虽然这还需要项目名称,对吗?

我也开始接近了

function stack-run () { stack build && stack exec `basename "$PWD"` }
Run Code Online (Sandbox Code Playgroud)

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

小智 13

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

  • 好吧,我对这个答案感到有点困惑.@Govind你的回答与我在关于`stack exec`的问题中提到的有什么不同?我正在寻找一个命令,它将`stack build` +`stack exec`一个项目,类似于我记得`cabal run`这样做. (7认同)

Zet*_*eta 10

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

stack build --exec <executable-name>
Run Code Online (Sandbox Code Playgroud)

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

stack unpack pandoc && cd pandoc*
stack build --exec "pandoc --version"
Run Code Online (Sandbox Code Playgroud)

这可能是你得到的最接近的cabal run,因为两者stack exec--exec旗帜都需要一个可执行的名字.然而,最干净的变体是一个额外的stack-run命令stack build --exec <first-executable in .cabal>.在项目的GitHub问题跟踪器上可能值得一个功能请求.


Wiz*_*zek 9

我有很好的使用经验:

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


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


老答案:

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

#/usr/bin/env sh

stack build && stack exec `basename "$PWD"` "$@"
Run Code Online (Sandbox Code Playgroud)

我把以下内容放入一个名为stack-runmy 的文件中$PATH.~/.local/bin/stack-run在我的情况下.

这让我可以

$ stack-run
Run Code Online (Sandbox Code Playgroud)

在任何目录中,甚至

$ stack run
Run Code Online (Sandbox Code Playgroud)

因为在我的几乎所有项目中,项目的可执行文件都与文件夹具有相同的名称,所以这是有效的.但我希望通过支持不同的名字来扩展它.


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

  • 现在 stack 1.9.1 有了 `stack run`! (2认同)