Crates.io | checkexec |
lib.rs | checkexec |
version | 0.2.0 |
source | src |
created_at | 2021-11-19 02:25:24.946524 |
updated_at | 2021-12-14 19:41:33.616514 |
description | Conditionally run a command in a CLI (like Make, as a standalone tool) |
homepage | |
repository | https://github.com/kurtbuilds/checkexec |
max_upload_size | |
id | 484260 |
size | 27,363 |
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
, creating 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
.fd
, making it easy to specify a dependency file list. Example here:# Only run your command if a rust file has changed. Note cargo does approximately the
# same thing natively, but you can easily tailor this structure to a custom case.
checkexec target/debug/hello $(fd -e rs . src) -- cargo build
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!