TL;DR: All build systems vary on the following axes:
- when the build system learns about dependencies (in the build specification or after doing some work)
- what information the system stores about previous builds
- where information about previous builds can be stored
- how build steps are scheduled (e.g. suspending, restarting, start-to-finish)
- whether the system does the minimum amount of work to build each artifact