checkexec
is a tool to conditionally execute commands only when files in a dependency list have been updated.
This tool provides the behavior of make
as a standalone executable, where a command is only run if any of its
dependencies have been updated. Like make
, checkexec
runs a command only if the modified time of any dependency
is newer than the modified time of the target.
The arguments are: <target> <dependencies...> -- <command>
. The --
is a required separator.
checkexec build/my-bin src/my-program.c -- cc -o build/my-bin src/my-program.c
checkexec
executes the command directly, so shell constructs like '&&' and '||' are not supported.
You can use /bin/bash -c
as the command, but escaping is tricky. You're likely better off using two invocations of
checkexec
.
You can infer the dependency list with --infer
, where checkexec will inspect the arguments of <command>
for
accessible paths. --infer
will fail if no files are found.
checkexec build/my-bin --infer -- cc -o build/my-bin src/my-program.c
cargo install checkexec
checkexec
is great for when you build files from other files. Instead of relying on
ecosystem-specific tools, you can use checkexec
as part of any build tool. Here are some examples:
checkexec
pairs well with just
to offer a modular and
modern build process and command runner. just
fixes numerous problems with
make
, and checkexec
adds back the conditional rebuild functionality of make
.
checkexec
exit codes behave as you would expect, specifically:
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star!