text
_
_ _ ___ _____ ___| |_ ___
| | | | | .'| '_| -_|
|___|_|_|_|_|_|__,|_,_|___|
unmake
is a makefile linter emphasizing portability. We target the POSIX make standard.
With unmake
, you can develop practical, portable makefile
scripts, such as for provisioning dev environments.
No need for more heavyweight tools like Ansible, Docker, Lua, Python, or WSL! Just good ol' make.
```console $ cd fixtures/parse-valid
$ unmake . warning: ./Makefile: MAKEFILEPRECEDENCE: lowercase Makefile to makefile for launch speed warning: ./boilerplate-ats.mk:4: SIMPLIFYAT: 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 to *.include.mk ... ```
See unmake -h
for more options.
See makefile for a live example of a portable dev environment provisioning script for this Rust project.
unmake
applies a stricter reading of POSIX syntax than make -n
. Whereas make -n
may skip inactive sections depending on control flow, unmake
scans each line. For example, make -n
may only check instructions specific to building the default task.
In fact, the two checks complement each other. make -n
checks for dry-run runtime issues. unmake
checks for syntactic portability issues.
unmake
automatically recurses over directories.
When recursing over directories, unmake
skips symlinks.
unmake
skips many implementation-specific files such as GNUmakefile
.
unmake
skips many machine-generated makefiles. For example, makefiles produced by autotools; Perl; and cmake when using the Unix Makefile generator (both in-source builds and out-of-source builds).
unmake
skips any third party makefiles housed in subdirectories like .git
, node_modules
, or vendor
.
To investigate makefiles in more detail, see the --debug
or --inspect
command line options for unmake
.
unmake
can identify low level makefile quirks, such as invalid syntax.
See SYNTAX.md for more information.
unmake
can identify higher level portability recommendations for makefiles.
See WARNINGS.md for more information.
https://crates.io/crates/unmake
https://docs.rs/unmake/latest/unmake/
https://github.com/mcandre/unmake/releases
console
$ cargo install --force --path .
(None)
For more details on developing crit itself, see DEVELOPMENT.md.
FreeBSD
Some projects using unmake
to safeguard their makefiles: