The pipeline approach here is interesting, but it seems you'd be on your own for filtering out changes in the build directory, etc. I typically use watchexec [1] for this.
watchexec make
By default, watchexec will filter out changes in files based on `.gitignore`.
[1]: https://github.com/watchexec/watchexec