Why CMake add_custom_command with DEPFILE reruns every time?

Not at all. Absolute paths are perfectly valid and supported. See also CMP0116 which is relative to paths in depfile.