Cross platform software is the kind of idea that's quickly annoying because when is come to the development. Should we develop the platform versions one after this other or in parallel? How to maintain the code running on every platform?
Being able to develop in parallel every versions have a lot of advantages but it required a good development infrastructure, code repository (CVS, SVN, GIT, ...), tests and a build system; here I'm thinking about CMake!
A build system is a tool which allows creating projects or makefiles to build the software on any platform required. A single input for several outputs so that if you add a file on one platform, this file will be added on any output. A build system will also make easy the management of different compiler versions (Visual C++ 7.1, 8.0, 32 bits / 64 bits). It manages your various build profiles like debug, release, beta or whatever you can think of.
Switching to CMake is a quite long work on already large projects but the benefices worth it.
I'm currently updating my development process using SVN and CMake for my projects. Everything is merged in one place so that when a project is updated it can be checked with all projects that uses it which improve it's own testing and force the update of dependent projects to the last version so that all code get up and running.
Imagine a world where you can rely on your good old code when you try to build it... it work! This is the effect of a good code development and maintenance process!