With the growing number of builds and platforms, that games are targeting, the need for easy maintainable build system has become vital.

Its not unusual to maintain make files, Visual Studio projects, XCode projects and more, completely manually for large games (Brink or Heavenly Sword for example).

At some point this becomes too error prone and painful for CI (Continuous Integration). Often there will be several well maintained builds and the others lagging, which of course that platform make system always get updated only when somebody wants to build that version; CI systems dislike this a lot.

Enter stage left, our hero CMake. CMake is a bit of misnomer as its not actually a conventional make system, instead its a meta make file maker. It generates whatever make file system you use on a particular system from the description you give it. So update one set of CMake files and then generate Visual Studio projects on windows (for whatever version you use), make files on Linux and XCode on Os X and so on

As it built on a simple yet effectively DSL for builds, it fairly easy to build the rules to build sets of libraries, exes and any other files. Another great built-in feature its lots of ‘Find’ functions, these setup many of the major libraries for most OSS libraries. Helper guis and documentation on the net ensure a fairly short learning curve to handle the most complex of systems (its notable used for the KDE desktop)

An integrated test system and support for a remote dash board to monitor your build with experimental control of nightly and continuous build its expanding out just a meta make system.

A few negative points are as its growing, so of it is hard to setup (CDash and CI being notable) and some parts aren’t quite configurable enough (CTest for example). The other magic issue is that as its uses the native platform make system it inherits all the pros and cons of them. One possible solution would be to write a generator to other make systems, with lots of work taking care of by CMake, should be a lot easier to write a quick dependencies check and command output to get fast, distributed and object caching make system. Add that to the list of things I’ll never get round to doing Smile

Lots to explore, but worth a look if you are cross platform in any way and want to use the standard method for each platform but not have to maintain each one separately.