3 ms·
I once used Shake[1], a Haskell library/EDSL for expressing and running build rules, to make a build system for work. I highly recommend it over rolling your ow
by evincarofautumn 9y ago
I once used Shake[1], a Haskell library/EDSL for expressing and running build rules, to make a build system for work. I highly recommend it over rolling your own, if you need custom build tooling at all.
Our use case was a developer tool that would take in project files, sources, and assets, and bundle them for various platforms, push code to devices, or launch simulators for you. Notably, Shake made it fairly easy to ensure that we never needed to implement a “clean” command—all dependencies were correctly tracked.
Having strong static types and the Haskell library ecosystem available was a huge win for convenience and correctness over something like Make. Shake makes it easy to do concurrent builds with full or limited parallelism, minimise incremental build time, write multi-stage rules where e.g. you need to run the compiler to calculate the dependencies of a file, and properly handle commands that generate multiple output files. Nowadays it even supports progress reporting, profiling, and some linting of build rules.
[1]: https://shakebuild.com/ https://shakebuild.com/