[Haskell-cafe] Getting started with Shake

Evan Laforge qdunkan at gmail.com
Mon Sep 24 17:01:00 CEST 2012

> With shake I'm not sure exactly how to get started.  Should I have a
> separate project where I create the build system for the webapp?  Or
> can I setup something similar to sbt?
> Also, how do I handle dependencies with shake?  cabal will pull in
> packages from hackage and do the needful, is there anything in shake
> to do the same?  If not, how is it normally done?

I have a Shake directory in the project toplevel.  It has Shakefile.hs
and various other utility modules.  A shell script called mkmk
rebuilds the shakefile: 'exec runghc Shake/Shakefile.hs "$@"
build/opt/shakefile', and I usually use 'mk', which is another shell
script: 'exec build/opt/shakefile "$@"'.  You could use runghc all the
time, but I have a large project and interpreting the shakefile is
noticeably slower.

For dependencies I have HsDeps and CcDeps modules which do the minimal
amount of parsing to pull out 'import qualified XYZ' or '#include
"something.h"' lines.  The hs link rule uses it to get the transitive
imports of a binary to 'need' them, and the *.hs.o rule uses it to get
the direct imports of the file it's compiling.  Same story for the
*.cc.o rule and C++ binaries.

There are extra wrinkles for CPP-using hs file and FFI using files
that depend on C wrappers, and multiple build modes (debug, opt,
profile, test) but that's the gist of it.

I don't have a cabal file, just an INSTALL file that I can copy paste
into cabal install.  In the future I'll probably have a cabal file
that doesn't actually compile, just gives deps and their versions, but
so far copy pasting a bunch of stuff into cabal install hasn't been a
big deal.

More information about the Haskell-Cafe mailing list