Make is not good at dealing with systems that are spread over multiple directories. This leads to complicated code, in which it is often unclear how a variable is set, or what effect the setting of a variable will have on the build as a whole. Cons is a system for constructing, primarily, software, but is quite different from previous software construction systems. Cons was designed from the ground up to deal easily with the construction of software spread over multiple source directories. Cons makes it easy to create build scripts that are simple, understandable and maintainable.
Cons ensures that complex software is easily and accurately reproducible.
Cons uses a number of techniques to accomplish all of this. Construction scripts are just PERL scripts, making them both easy to comprehend and very flexible. Multiple environments are used when different semantics are required for generating products in the build tree. Cons implements automatic dependency analysis and uses this to globally sequence the entire build. Variant builds are easily produced from a single source tree.