I ran into this useful tip that if you\'re working on files a lot and you want them to build automatically you run:
watch make
And it re-runs make every couple s
I do it this way in my Makefile:
watch:
    (while true; do make build.log; sleep 1; done) | grep -v 'make\[1\]'
build.log: ./src/*
    thecompiler | tee build.log
So, it will only build when my source code is newer than my build.log, and the "grep -v" stuff removes some unnecessary make output.
Using classic gnu make and inotifywait, without interval-based polling:
watch:
    while true; do \
        make $(WATCHMAKE); \
        inotifywait -qre close_write .; \
    done
This way make is triggered on every file write in the current directory tree. You can specify the target by running
make watch WATCHMAKE=foo
Twitter Bootstrap uses the watchr ruby gem for this.
https://github.com/twbs/bootstrap/blob/v2.3.2/Makefile
https://github.com/mynyml/watchr
After two years the watchr project seems not to be maintained anymore. Please look for another solution among the answers. Personally, if the goal is only to have a better output, i would recommend the answer from wch here
There are several automatic build systems that do this and more - basically when you check a change into version control they will make/build - look for Continuous Integration
Simple ones are TeamCity and Hudson
How about
# In the makefile:
.PHONY: continuously
continuously:
    while true; do make 1>/dev/null; sleep 3; done  
?
This way you can run
make continuously
and only get output if something is wrong.