3 ms·
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 fo
by ralph 19y ago
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".
- omouse 19y agoOr if they can modify the script so if there's an error a return code of nonzero is returned which can be checked by the makefile.
- ralph 19y agoDon'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.
- pc 19y agoThis has never arisen so far (the code is so trivial that errors are rare), but it's a good point, so I just updated the post.
- ralph 19y agoI 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).