How can I get cargo to recompile changed files automatically?
Another option is using entr
ls -r | entr cargo run
This will recursively list all files in the current directory. Then redirect them to the entr
command which watches for changes to those files and then finally runs cargo run
There doesn't seem to be any support built in, but there is an extension (cargo-watch
) to detect changes using inotify
.
When I found it, it wouldn't work with stable (or current) Rust, but I've since patched it. It could still use some work, but it certainly speeds up the compile/fix-errors cycle.
cargo watch
In case you are working on a server project (e.g. hyper, iron, etc) that keeps running and you need it to be restarted when files change, you can use cargo watch
. Install:
cargo install cargo-watch
And then run:
cargo watch -x run
And to watch changes in only the src
folder and clear the console use:
cargo watch -c -w src -x run
See the cargo-watch README for more examples.
watchexec
Alternatively, you can use watchexec. Install it:
cargo install watchexec-cli
And then use it like this:
watchexec -r cargo run
I believe that the distinction is that running cargo run
twice won't build the code twice, unless the input files have changed. As far as I know, Cargo doesn't have the functionality you want built-in. You could file a feature request. In the meantime, I'd suggest you just use watch
. You could also use something like guard
. Using watch
is simpler, but would just run your code every N seconds. guard
would require more setup, but would be a bit more efficient.