2016-01-17 8 views
9

Bis vor kurzem war ich der Ausführung dieser Schönheit + zu bauen ein Projekt mit Stapel laufen:Gibt es einen "Stack Run" ähnlich wie "Cabal Run"?

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

Ich war im IRC gesagt, dass dies

stack build && stack exec <project-name> 

zu

vereinfacht werden kann, kann dies sein noch mehr vereinfacht, um

stack run 

oder mindestens

stack run <project-name> 

?

Wenn ich mich richtig erinnere, war dies mit cabal run möglich.

Edit:

@ haoformayor Kommentar ist immer in der Nähe:

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

Obwohl dies muss noch den Projektnamen, nicht wahr?

Ich habe angefangen, auch mit

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

Obwohl funktioniert dies nur nahe zu kommen, wenn der Projektname mit dem Ordnernamen übereinstimmt. Vielleicht können wir cabal/stack nach dem ersten executable Eintrag in der .cabal Datei abfragen? Oder Vielleicht könnten wir es tun mit sed ...

+0

Ich glaube nicht, es ein Äquivalent Befehl ist. Ich verwende Shell-Aliase, um etwas Ähnliches zu tun. So etwas wie 'alias b = 'stack build --fast --ghc-options =" ​​- Wall "&& stack exec'' – hao

+0

@haoformayor Das kommt dem, wonach ich suche, sehr nahe. Eine Sekunde, ich werde meine Frage ein wenig erweitern. – Wizek

+1

es ist ziemlich einfach, den Namen der ausführbaren Datei zu greifen, wenn Sie es brauchen: 'grep '^ ausführbare Datei * * .cabal | Schnitt -d '' -f 2 | head -n 1' – hao

Antwort

4

ich eine gute Erfahrung recht hätte mit:

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


Alter Antwort:

Dies ist, was ich jetzt am Ende tun.

#/usr/bin/env sh 

stack build && stack exec `basename "$PWD"` "[email protected]" 

Ich habe folgendes in eine Datei stack-run unter meinem $PATH benannt setzen. ~/.local/bin/stack-run in meinem Fall.

Was mich

$ stack-run 

in einem beliebigen Verzeichnis auf

erlaubt und sogar

$ stack run 

Da in fast allen meinen Projekten die ausführbare Datei des Projekts trägt den gleichen Namen wie der Ordner, das funktioniert . Aber ich hoffe, es mit Unterstützung für verschiedene Namen zu erweitern.


bearbeiten 2016.09.26: Ich habe auch festgestellt, diese haben aber noch nicht einen Versuch gegeben: https://hackage.haskell.org/package/stack-run

11

Wie es hier http://docs.haskellstack.org/en/stable/README.html#quick-start-guide erwähnt ist, können Sie stack exec my-project-exe verwenden, wo my-project-exe der Name der ausführbaren Datei in Ihrer .cabal Datei.

+0

es ist auch möglich, einige Befehlszeilenargumente zu übergeben:' stack exec - ' –

+7

Nun, ich bin ein durch diese Antwort etwas verwirrt. @Govind Wie ist deine Antwort anders als das, was ich in meiner Frage zu 'Stack Exec 'erwähnt habe? Ich suche nach einem Befehl, der 'stack build' +' stack exec' ein Projekt erstellt, ähnlich wie ich mich daran erinnere, 'cabal run' dabei zu tun. – Wizek

6

können Sie --exec verwenden Stapel zu sagen, welches Programm ausgeführt werden soll, nach einem erfolgreichen Jahr:

stack build --exec <executable-name> 

Sie auch Argumente für die ausführbare Datei angeben können, beispielsweise

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

, die wahrscheinlich ist die nächste Sie cabal run Vergleich erhalten werden, da beide stack exec und die --exec Flag benötigen einen Namen der ausführbaren Datei. Die sauberste Variante wäre jedoch ein zusätzlicher stack-run Befehl, der stack build --exec <first-executable in .cabal> ist. Es könnte a feature request auf dem GitHub Issue Tracker des Projekts wert sein.

+1

Übrigens, wenn Sie sowohl cabal _and_ stack installiert haben, können Sie auch "stack build --exec" cabal run "' ausführen. Aber das ist etwas erfunden. – Zeta