IMHO, the GNU tools have facilities for doing all of these things.
We distribute software packages that consist of C++ code, Tcl code, and install scripts. Autoconf and automake generate the bulk of the config scripts and makefiles, and ".in" files handle the rest.
The build process looks like:
configure --prefix=/target1 make make prefix=/target2 install pushd /target2 stow pkgname-n.n popd
It is left as an exercise to the reader to find out about STOW.
I am infinitely irritated by companies that waste huge amounts of time developing make rules for windows and then "don't have time" to do the smaller job of autoconf/automake for GNU.
Just my 2 cents.