unmake: a makefile linter
_
_ _ ___ _____ ___| |_ ___
| | | | | .'| '_| -_|
|___|_|_|_|_|_|__,|_,_|___|
ABOUT
unmake checks makefiles for syntax errors and portability issues.
EXAMPLES
$ cd fixtures
$ unmake .
error: ./invalid/crlf.mk:1:5 found "\r", expected: LF, comment, inline command, macro expansion, target, wait prerequisite marker
...
See unmake -h for more options.
NOTABLE FEATURES
Directory recursion
unmake automatically recurses over directories.
When recursing over directories, unmake skips symlinks.
unmake skips many implementation-specific files named like GNUmakefile or BSDmakefile.
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 house in subdirectories like .git, node_modules, or vendor.
To investigate makefiles in more detail, try the --debug or --inspect options.
PARSE ERRORS
unmake can identify subtle makefile quirks.
See SYNTAX.md for more information.
LINTER WARNINGS
Coming soon.
CRATE
https://crates.io/crates/unmake
API DOCUMENTATION
https://docs.rs/unmake/latest/unmake/
DOWNLOAD
https://github.com/mcandre/unmake/releases
INSTALL FROM SOURCE
$ cargo install --force --path .
RUNTIME REQUIREMENTS
(None)
Recommended
CONTRIBUTING
For more details on developing crit itself, see DEVELOPMENT.md.
LICENSE
FreeBSD
MORE EXAMPLES
Some projects using unmake to safeguard their makefiles:
- buttery, a GIF looper
- crit, a Rust cross-compiler
- factorio, a Go cross-compiler
- octane, a MIDI forwarder
- slick, a POSIX sh syntax validator
SEE ALSO
- 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
- 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
- slick, a POSIX sh syntax validator
- tinyrick, a task runner for Rust projects