Не существует общего решения - каждая ОС имеет свой собственный API для мониторинга файлов. В Mac OS X это FSEvents, в Linux - inotify или fanotify, в BSD - kqueue.
В Linux вы можете использовать incron или написать скрипт, используя inotifywait:
#!/usr/bin/env bash
inotifywait -r -m -q -e close_write ~/project \
| while read path event file; do
if case $file in
autogenerated.h) false;; # ignore a specific file to avoid loops
*.c|*.h|Makefile) true;; # watch all .c, .h files, the Makefile
*) false;; # ignore all other files to avoid loops
esac; then # (specifically, you MUST ignore auto-
(cd ~/project && make) # -generated files)
fi
done