直到最近,我正在执行这个 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
...
答案 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