The makefile rule will leave behind a .css file even if there's errors. Compare to "cc -c foo.c" and the existance of foo.o on an error; we don't do "cc -c foo.c >foo.o".
Things like this can cause hard to find problems further down the line in a big system build; after the error the target file exists and is newer than the sources.
Either don't use shell re-direction or do "cmd foo foo.tmp && mv foo.tmp foo".
Don't know why anyone's modded you down. I was thinking that either the interpreter, e.g. ruby, or the script itself already returned a non-zero exit status and the makefile detected that. That doesn't cause make to remove the target.
$ make foo
false >foo
make: *** [foo] Error 1
$ make foo
make: `foo' is up to date.
$
I suppose they could do "cmd foo >bar || rm bar" instead of the mv I suggested. But that causes no bar to exist whereas the mv leaves the pre-build one behind.
I suppose you could also make $(SOURCES) depend on $(GEN) to save having to remember the "make clean" sometimes. Speaking of clean, the ....out needs cleaning up too, e.g. "rm -f $(SOURCES:%=%.out)" perhaps (untested).
Things like this can cause hard to find problems further down the line in a big system build; after the error the target file exists and is newer than the sources.
Either don't use shell re-direction or do "cmd foo foo.tmp && mv foo.tmp foo".