[CMake] Converting a large C++-Project to CMake

Karl Wallner cmake at karlwallner.de
Sun Oct 31 21:13:13 EDT 2010


Am 30.10.2010 13:54, schrieb Benjamin King:
> Hello,
>
> I'm working on a ~1.5Mio LOC C++ project and our buildsystem is a hodgepodge of handcrafted Makefiles, shell scripts and
> qmake projects.
> I tried to convert a subset to CMake and it looks very promising so far.
>

I'm currently (as a consultant) converting ~2.5 Mio LOC C++/C from vcproj/Makefiles/qmake to cmake.
Working with big projects, different VCS, lots of developers is very different to using cmake in
small projects (few developers, single repository).
Here are some things I've learned so far:
- Split repositories (You can not put ~2.5 Mio LOC in one repository)
- Automate everything (You need: continuous build and delivery, use cdash or hudson)
- Complete build process (You need: checkout, build, packaging and install)
- Support developers (You need: developers want to work as they used to with their IDE)
- Fill gaps (You need: Find*-Modules, CMake-Macros)

> One important part of our development workflow is this:
> 1) User 'nightly' builds versions of the project every night on several development servers.
> 2) A developer is coming to the office in the morning, and copies/hardlinks the nightly build to his home dir and
> probably patches uncommited changes from yesterday into the newly copied build.

Nightly builds are very useful to build releases. Developers should have their own source tree and update it on
their own (daily or more often updates from repository and incremental rebuilds). Systems for continuous
integration might also be useful.

> Our build is taking ages (almost a three hours on the fastest of our servers) and it would be really painful if
> everybody needed to rebuild everything for himself in the morning.
> According to the FAQ, CMake does not support copying build trees around. On the development servers, we have the special
> situation that all external tools needed for the build are either in /usr/bin, /usr/local/bin or
> /opt/local/ourstuff/build/bin. Would it be feasible to copy a build tree in such a setting? Or could we copy everything,
> throw the CmakeCache away, reconfigure and reuse the object files that already were build?

There are others ways to build faster, like ccache (http://ccache.samba.org/) or distcc (http://distcc.samba.org/).

> Do you have any advice on this or other ideas? This is really a make-or-break feature for us and I'd like to present
> some solution with CMake for it.

If you are going to change tools (introduce cmake), it is also time to review your development process (If in the 
business world e.g. a SAP-Systems is introduced the complete work flow and business processes will get adapted).


Regards,

Karl





More information about the CMake mailing list