Well, you should just separate the "get source from Perforce" and "upload binaries to server" parts from the process that builds the executable.
Then just release the part that builds the executable, which is the only actual build system.
Or you can create an alternate system that produces the same result, but that's just wasted work.
In practice, you'd have an in-tree build system using autotools/cmake/whatever, plus a script in a different repository that fetches the source, calls the build system and pushes out the release.