shake: Build system library, like Make, but more accurate dependencies.

[ bsd3, development, library, program, shake ] [ Propose Tags ] [ Report a vulnerability ]

Shake is a Haskell library for writing build systems - designed as a replacement for make. See Development.Shake for an introduction, including an example. The homepage contains links to a user manual, an academic paper and further information: https://shakebuild.com

To use Shake the user writes a Haskell program that imports Development.Shake, defines some build rules, and calls the Development.Shake.shakeArgs function. Thanks to do notation and infix operators, a simple Shake build system 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 also provides more accurate dependency tracking, including seamless support for generated files, and dependencies on system information (e.g. compiler version).


[Skip to Readme]

Flags

Manual Flags

NameDescriptionDefault
portable

Obtain FileTime using portable functions

Disabled
cloud

Enable cloud build features

Disabled
embed-files

Embed data files into the shake library

Disabled
threaded

Build shake with the threaded RTS

Enabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.0, 0.1, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.2, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.2.5, 0.2.6, 0.2.7, 0.2.8, 0.2.9, 0.2.10, 0.2.11, 0.3, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.3.5, 0.3.6, 0.3.7, 0.3.8, 0.3.9, 0.3.10, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.9.1, 0.10, 0.10.1, 0.10.2, 0.10.3, 0.10.4, 0.10.5, 0.10.6, 0.10.7, 0.10.8, 0.10.9, 0.10.10, 0.11, 0.11.1, 0.11.2, 0.11.3, 0.11.4, 0.11.5, 0.11.6, 0.11.7, 0.12, 0.13, 0.13.1, 0.13.2, 0.13.3, 0.13.4, 0.14, 0.14.1, 0.14.2, 0.14.3, 0.15, 0.15.1, 0.15.2, 0.15.3, 0.15.4, 0.15.5, 0.15.6, 0.15.7, 0.15.8, 0.15.9, 0.15.10, 0.15.11, 0.16, 0.16.1, 0.16.2, 0.16.3, 0.16.4, 0.17, 0.17.1, 0.17.2, 0.17.3, 0.17.4, 0.17.5, 0.17.6, 0.17.7, 0.17.8, 0.17.9, 0.18, 0.18.1, 0.18.2, 0.18.3, 0.18.4, 0.18.5, 0.19, 0.19.1, 0.19.2, 0.19.3, 0.19.4, 0.19.5, 0.19.6, 0.19.7, 0.19.8 (info)
Change log CHANGES.txt
Dependencies base (>=4.9 && <5), binary, bytestring, deepseq (>=1.1), directory (>=1.2.7.0), extra (>=1.6.19), filepath (>=1.4), filepattern, hashable (>=1.1.2.3), heaps (>=0.3.6.1), js-dgtable, js-flot, js-jquery, primitive, process (>=1.1), random, semigroups (>=0.18), time, transformers (>=0.2), unix, unordered-containers (>=0.2.7), utf8-string (>=0.3) [details]
Tested with ghc ==9.8, ghc ==9.6, ghc ==9.4, ghc ==9.2, ghc ==9.0, ghc ==8.10, ghc ==8.8
License BSD-3-Clause
Copyright Neil Mitchell 2011-2024
Author Neil Mitchell <ndmitchell@gmail.com>
Maintainer Neil Mitchell <ndmitchell@gmail.com>
Category Development, Shake
Home page https://shakebuild.com
Bug tracker https://github.com/ndmitchell/shake/issues
Source repo head: git clone https://github.com/ndmitchell/shake.git
Uploaded by NeilMitchell at 2024-01-14T14:33:04Z
Distributions Arch:0.19.6, Debian:0.19.1, Fedora:0.19.7, FreeBSD:0.15.5, LTSHaskell:0.19.8, NixOS:0.19.8, Stackage:0.19.8
Reverse Dependencies 63 direct, 31 indirect [details]
Executables shake
Downloads 147694 total (479 in the last 30 days)
Rating 2.5 (votes: 10) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for shake-0.19.8

[back to package description]

Shake Hackage version Stackage version Build status

Shake is a tool for writing build systems - an alternative to make, Scons, Ant etc. Shake has been used commercially for over five years, running thousands of builds per day. The website for Shake users is at shakebuild.com.

Documentation

  • Why use Shake? Shake lets you write large robust build systems, which deal properly with generated source files and run quickly. If you are writing a custom build system of any moderate size (more than a few rules) you should use Shake. The advantages over other build systems are detailed in the document Why choose Shake?.
  • How do I use Shake? Shake is a Haskell library that you use to define your rules. The Shake manual provides a walk through of a small but realistic example, assuming no Haskell knowledge.
  • Generated documentation for all functions, includes lots of examples.
  • Blog posts detailing ongoing development work.
  • Academic paper on the underlying principles behind Shake.
  • Download the Haskell package from Hackage and install it using Cabal.
  • Mailing list for any questions/bugs/thoughts on Shake. If you need more information and aren't sure where to start, use the mailing list.
  • Questions can be asked on StackOverflow with the tag shake-build-system.

Is your company using Shake? Write something public (even just a tweet to @ndm_haskell) and I'll include a link on the website.