【问题标题】:Is there a `stack run` similar to `cabal run`?是否有类似于 `cabal run` 的`stack run`?
【发布时间】:2016-01-17 18:59:25
【问题描述】:

直到最近,我一直在执行这个 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/stack 以获取 .cabal 文件中的第一个 executable 条目?或者也许我们可以用sed...

【问题讨论】:

  • 我不相信有等效的命令。我使用 shell 别名来做类似的事情。类似alias b='stack build --fast --ghc-options="-Wall" &amp;&amp; stack exec'
  • @haoformayor 这已经接近我想要的了。等一下,我把我的问题扩展一下。
  • 如果需要的话,获取可执行文件名相当容易:grep '^executable' *.cabal | cut -d ' ' -f 2 | head -n 1
  • 还有stack runghc ./src/Main.hs
  • 这是一个老问题,但是:现在最新版本中有一个真正的stack run 命令!

标签: haskell stackage


【解决方案1】:

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

【讨论】:

  • 也可以传递一些命令行参数:stack exec -- &lt;project-name&gt; &lt;arg1&gt; &lt;arg2&gt;
  • 好吧,我对这个答案有点困惑。 @Govind 您的回答与我在关于stack exec 的问题中提到的有何不同?我正在寻找可以stack build + stack exec 一个项目的命令,类似于我记得cabal run 这样做的方式。
【解决方案2】:

您可以使用--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 &lt;first-executable in .cabal&gt;。在项目的 GitHub 问题跟踪器上可能值得a feature request

【讨论】:

  • 顺便说一句,如果你同时安装了 cabal 堆栈,你也可以运行stack build --exec "cabal run"。但这有点做作。
【解决方案3】:

我有很好的使用经验:

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


编辑 2018-04-05:Relevant stack issue


旧答案:

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

#/usr/bin/env sh

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

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

这让我可以

$ stack-run

在任何目录,甚至

$ stack run

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


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

【讨论】:

  • 现在堆栈 1.9.1 有 stack run
猜你喜欢
  • 2015-04-25
  • 1970-01-01
  • 2019-04-24
  • 2022-10-05
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
相关资源
最近更新 更多