Shake
Shake is a Haskell library for writing build systems - designed as a
replacement for make. To use Shake the user writes a Haskell program
that imports the Shake library, defines some build rules, and calls
shake. Thanks to do notation and infix operators, a simple Shake program
is not too dissimilar from a simple Makefile. However, as build systems
get more complex, Shake is able to take advantage of the excellent
abstraction facilities offered by Haskell and easily support much larger
projects.
The Shake library provides all the standard features available in other
build systems, including automatic parallelism and minimal rebuilds.
Shake provides highly accurate dependency tracking, including seamless
support for generated files, and dependencies on system information
(i.e. compiler version). Shake can produce profile reports, indicating
which files and take longest to build, and providing an analysis of the
parallelism.
Downloads
- Released version
- Source code
- Bug tracker
- Shake Before Building - Replacing Make with Haskell - from ICFP 2012 (abstract)(hide abstract)
Most complex software projects are compiled using a build tool (e.g. make), which runs commands in an
order satisfying user-defined dependencies. Unfortunately, most build tools require all dependencies to
be specified before the build starts. This restriction makes many dependency patterns difficult to express,
especially those involving files generated at build time. We show how to eliminate this restriction,
allowing additional dependencies to be specified while building. We have implemented our ideas in the
Haskell library Shake, and have used Shake to write a complex build system which compiles millions of lines of code.
(bibtex)(hide bibtex)@inproceedings{mitchell:shake_2012_9_10
,title = {Shake Before Building - Replacing Make with {Haskell}}
,author = {Neil Mitchell}
,year = {2012}
,month = {September}
,day = {10}
,location = {Copenhagen, Denmark}
,booktitle = {ICFP '12: Proceedings of the 17th ACM SIGPLAN International Conference on Functional Programming}
,publisher = {ACM}
,isbn = {978-1-4503-1054-3}
,url = {\verb'http://community.haskell.org/~ndm/downloads/paper-shake_before_building-10_sep_2012.pdf'}
}
- Shake: A Better Make - from Haskell Implementors Workshop 2010 (bibtex)(hide bibtex)
@misc{mitchell:shake_2010_10_1
,title = {Shake: A Better Make}
,author = {Neil Mitchell}
,year = {2010}
,month = {October}
,day = {1}
,note = {Presentation from Haskell Implementors Workshop 2010}
,url = {\verb'http://community.haskell.org/~ndm/downloads/slides-shake_a_better_make-01_oct_2010.pdf'}
}
Tags: haskell library popular