_
_ _ ___ _____ ___| |_ ___
| | | | | .'| '_| -_|
|___|_|_|_|_|_|__,|_,_|___|
Recursive POSIX makefile linter
% cd fixtures/parse-valid
% unmake .
warning: ./Makefile: MAKEFILE_PRECEDENCE: lowercase Makefile to makefile for launch speed
warning: ./boilerplate-ats.mk:4: SIMPLIFY_AT: replace individual at (@) signs with .SILENT target declaration(s)
warning: ./missing-posix.mk:1: STRICT_POSIX: lead makefiles with the ".POSIX:" compliance marker, or else rename include files like *.include.mk
...| OS | Package | |
|---|---|---|
| macOS 26 Tahoe+ | Intel | ARM |
| Ubuntu 24.04 Noble+ / WSL 2+ | Intel | ARM |
For more platforms and installation methods, see INSTALL.
For details on parser rules, see SYNTAX.
For details on scanner rules, see WARNINGS.
For details on building from source, see DEVELOPMENT.
unmake detects subtle portability quirks in makefiles.
Prior art, personal plugs, and tools for developing software.
- BSD make, a popular make implementation with BSD extensions
- cmake, a make-adjacent build system with its own portability features
- GNU make, a popular make implementation with GNU extensions
- Grunt, Node.js task runners
- invoke, a task runner for Python projects
- lake, a task runner for Lua projects
- mcandre/linters, a wiki of common programming language linters and SAST tools
- mage, a task runner for Go projects
- ninja, a fast build system without conditionals
- nmake, a make-adjacent build system for .NET projects
- Rake, a task runner for Ruby projects
- Shake, a task runner for Haskell projects
- ShellCheck, a linter for POSIX sh family shell scripts
🙃