Skip to content

Build Systems

October 22, 2023
June 11, 2015

Build Tools: Make, Rake, Ant, Sbt - Hyperpolyglot
The 13 Things That Make a Good Build System | SignalFx

GNU Make

cmake

Make - GNU Project - Free Software Foundation
GNU make
θ·Ÿζˆ‘δΈ€θ΅·ε†™ Makefile source
Makefile Tutorial by Example
Linux Fu: The Great Power Of Make | Hackaday

The joy of make at jsconfeu
Practical Makefiles, by example
Building Web Applications With Make – Smashing Magazine
Building JavaScript projects with Make – The If Works
Makefiles – Mrbook's Stuff
The Lost Art of the Makefile
Makefile instead of hoop jumping gist

Creating configuration scripts and Makefiles using autoconf & automake

Jobserver Implementation | GNU make

GNU make: Automatic Variables
GNU Autoconf, Automake and Libtool

# show rules
make -pn

# shows how make works
make --debug=v

mmake

Modernizing Make - TJ Holowaychuk - Medium
tj/mmake: Modern Make

non-recursive make

Recursive Make Considered Harmful
Recursive make Reloaded | Linux Magazine
Implementing non-recursive make

I evaluated two implementations: aostruszka/nonrec-make and dmoulding-boilermake Β· GitHub on these grounds:

boilermake is quite restrictive in that each .mk only supports one target, so a module could contain multiple .mk to build multiple libs and test app. To add a dependency, we need:

TGT_PREREQS += lib/libfoo.a
TGT_LDLIBS  += -lfoo

nonrec-make is easier in including multiple sub-makefiles and supports expanding rule for source files (akin to *.c). It also added support for external build system.

Examples:

Task

Task is a task runner / build tool that aims to be simpler and easier to use than, for example, GNU Make.

Home | Task
go-task/task: A task runner / simpler Make alternative written in Go

Pants

Pants
How does Pants work?

Build Tools with Benjy Weinberger - Software Engineering Daily

just

task runner rather than a build system

Introduction - Just Programmer's Manual
casey/just: πŸ€– Just a command runner

Buck

Buck: A fast build tool by Facebook

7 Reasons to Use Buck Build – Hacker Noon
(Even) More Reasons to Use Buck Build – Hacker Noon
How to Create a Buck-based C/C++ Project – Hacker Noon
Generating a Single-Include C++ Header File Using Buck
Lessons Learned from Porting 300 C/C++ Projects to Buck Build

BuildInfer

BuildInfer β€” Next Generation C/C++ Build Acceleration
Why Not Make? – Hacker Noon

Meson

The Meson Build system

Invoke

Welcome to Invoke! β€” Invoke documentation write tasks in Python

Lake

Lake – a Lua-based Build Engine
stevedonovan/Lake: A Lua-based Build Tool

nobuild

used by cross-platform-apps-desktop#Olive.c

tsoding/nobuild: Header only library for writing build recipes in C.

Gradle

gradle

Node.js ecosystem

build-systems-node-js

Bazel

Bazel, supported languages

gyp

gyp was the build system used by Chromium and Node.
But Chromium has since moved to GN.

gyp-UserDocumentation.md
Converting a C library to gyp β€” n8.io

Ninja

Ninja, a small build system with a focus on speed
Using GN build - Google Slides
The Performance of Open Source Software | Ninja
Building Like (a) Ninja [Pt1]

docs - gn - Git at Google GN is a meta-build system that generates build files for Ninja.

saghul/gyn

NUKE

Smart automation for DevOps teams and CI/CD pipelines | NUKE
nuke-build/nuke: πŸ— The AKEless Build System for C#/.NET

10 Ingredients for an AKEless Build System. Matthias Koch .NET Fest 2019 - YouTube

Pants

Pants Build
Pants is a build system written by Twitter to build Python and Java codes.

Getting Started with the Pants Build System - YouTube

Mule

algorand/mule: General automation framework
Automating with the Mule framework | by Brice Rising | Algorand | Medium

tup

tup | Home

Buildout

Buildout, an automation tool written in and extended with Python β€” Buildout documentation

Waf

Waf: the meta build system
The Waf Book
waf-project/waf: The Waf build system

Make-It-Quick (MIQ)

c3d/make-it-quick: A simple auto-configuring make-only build system