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`.