Rainer Deyke via Boost
- Builds should be hermetic. Compiling the same project with the same command-line arguments on different computers should result in bit-for-bit identical results.
I believe what you are describing is commonly referred to as "reproducible builds". Hermeticity (broadly) means having a complete track of everything that contributes into the build and being able to prevent (or at least detect) uncontrolled changes to any of it. Hermeticity makes it easier to achieve reproducible builds but is neither required nor sufficient. True hermeticity is also very difficult to achieve in C/C++ projects.
(I currently handle this by compiling in a Docker container.)
Well, that doesn't really qualify as "different computers", does it? It's always "your (virtualized) computer" ;-).
- I want to build for multiple target operating systems on one computer, from one source directory, with one invocation of the build system. - I don't like to edit my build specification files every time I add or remove a file, so I use wildcards extensively in specifying which source files to build. - Some executables need to be built for the target platforms. Some only need to be built for the build platform, so that I can run them as part of the build process. - The set of artifacts produced from one (data) source file is not known until the source file is processed. (Example: unzipping a zip file as part of the process of building the library contained in the zip file.)
All covered by build2, if you are interested. We also have a notion of hermetic build configurations (though they are no magic, unfortunately): https://build2.org/release/0.14.0.xhtml#hermetic