So generally the right thing to do is to delete the target file if the recipe fails after beginning to change the file. make will do this if .DELETE_ON_ERROR appears as a target. This is almost always what you want make to do, but it is not historical practice; so for compatibility, you must explicitly request it.
In other words, the default behaviour is that an unexpected error may leave a file in an indeterminate state, but Make will carry on regardless. The .DELETE_ON_ERROR target can be used to change this behaviour, but the default is to keep outputs after an error occurs.