I think a standard ruleset that helped break up large projects would be useful. As an example, you might wish to control the compiler used by a project, so you check GCC in as one package, and have it export the resulting compiler executable to the other packages. When you import a new release of GCC, you may have to update source code in many packages to adjust to the new bugs. You want different other packages to use different revisions of the one package. Executable Specification of processes.
Any large team develops methods for performing certain actions.
They might come to some agreement for what to do before checking in a change to a piece of code. It is helpful to have a central known place to collect descriptions of which actions have been standardized, and even more helpful to have those standardized actions codified into executable specifications. Build scripts are one way to do this. I suppose shell scripts might be another good way, but it seems like most standardized actions end up wanting to use some build logic anyway. Targets vs. Files.