Yes, indeed. And I do exactly that with a Bernstein redo build system. Daniel J. Bernstein had this idea decades ago, with the has/try system evident in publicfile back in in 1999, for example. Converted to redo, which Bernstein never did, it looks like this:
* https://github.com/jdebp/nosh/tree/trunk/source/config
Notice that all.do at the top level does
redo-ifchange -- config/all
before pretty much everything else, which invokes the config/all.do at that level, which in turn builds all of the headers via their has*.h.do files and using the try*.cpp files. config/cxx.do builds the name of the compiler, as picked up by ./compile at the top level. config/cxxflags.do builds its flags.redo handles rebuilding everything as necessary, including all of the programs that include the feature test headers, if a has*.h.do file changes, a try*.cpp file changes, the compiler/linker options change, or the ./compile and ./link scripts change. It's even possible, although I don't do it, once ${cxx} has been determined in cxx.do, to do a
redo-ifchange -- "${cxx}"
and make the whole thing sensitive to the actual compiler changing. I don't do it in the nosh build because it's not worth being that sensitive to the tooling. I actually do do it in the djbwares build (which collects publicfile and various other Bernstein softwares under a single umbrella).So yes, using the very same build system that is building the software to build the feature probes is an idea that is at least a quarter century old, and Daniel J. Bernstein was almost there. Xe just never published an actual redo that could do what xe called 'honest prerequisites'. Xe got as far as ./choose in a Makefile, though.
* http://jdebp.info./FGA/introduction-to-redo.html
* https://cr.yp.to/redo/honest-script.html
* https://salsa.debian.org/debian/publicfile/-/blob/master/Mak...