Watch for changes

werk can automatically watch for changes to the workspace and re-run a task or build recipe when a change occurs.

In any project, run werk <target> --watch to build a target and then wait for changes to any files in the workspace to trigger a rebuild.

Only files in the workspace are watched for changes - not changes in the output directory, or changes to files covered by .gitignore.

werk inserts a small delay between detecting a file and actually starting a rebuild, to avoid "overreacting" when many changes occur, and also because some filesystem notifications are actually delivered before the change is visible. This delay can be customized using --watch-delay=<ms>.

--watch works together with other flags, like --explain, to provide detailed information about the build.

Example

Using the C example, this will build and re-run the executable for every change.

$ werk run --watch --explain
[ ok ] /my-program.exe
foo() returned: 123
[ ok ] run
[werk] Watching 4 files for changes, press Ctrl-C to stop

Making a change to any of the files involved in the build will then cause a rebuild. Let's say a change was made to foo.h, which is included by other files:

[0/1] rebuilding `/foo.o`
  Cause: `/foo.h` was modified
[0/1] rebuilding `/main.o`
  Cause: `/foo.h` was modified
[ ok ] /foo.o
[ ok ] /main.o
[0/1] rebuilding `my-program.exe`
  Cause: `/foo.o` was rebuilt
  Cause: `/main.o` was rebuilt
[ ok ] /my-program.exe
foo() returned: 123
[ ok ] run
[werk] Watching 4 files for changes, press Ctrl-C to stop