I don’t quite see how Unix tools have trouble with spaces in filenames. Could you detail some cases where the space handling is not due to the shell, as opposed to the program being invoked?
It's perfectly fine for a rule to have multiple targets, e.g.
output.txt error.txt: source
build source > output.txt 2> error.txt