strace -f -erename gcc -o foo foo.c Nothing in that process chain invokes rename(2), so it can't be atomic. It's probably worth patching automake at some point to output atomic rules, but anyways I do it in my custom rules. See also https://github.com/apenwarr/redo