Search code examples
c++continuous-integrationcmakepremake

Cross platform continuous integration pipeline for C++ / Qt applications


EDIT 2012.03.02: updated build tool section with some other requirements. Addding premake.

EDIT 2012.03.05: updated build tool section. Focused on CMake. Added Ant + CMakeAnt.

I have a lot of small Visual C++ projects and I want to start using continuous integration for that. A lot of tools are involved in the process. I start reading articles here and there and it is hard for me to see which to tool could integrate nicely with the others. So I am looking for an already tested continuous integration workflow that could respect my needs:

Current Context

  • C++/Qt applications developed with Visual Studio;
  • Less than 1'000 source files;
  • Small dev team;
  • Small budget;
  • Preferably open source/free software;
  • Looking for easy to use and simple tools. No need of something heavy and "powerful".
  • Finally packages software (installers ready for download) should work for windows and OSX. Linux (most popular distributions) is a plus.

Tools needed

  • Continuous Integration Server:

    Needs to be Jenkins. I know it and I like it. I could change for another one if it is really needed.

  • Source Code Management:

    GIT.

  • Documentation Generator:

    Doxygen.

  • Build Tool:

    We will need to generate solutions and configurations for all the platforms we need to support. I have been strongly advised to use CMake for that. Ant + CMakeAnt (http://code.google.com/p/cmakeant/) seems to be a nice addition too.

  • Unit Testing Framework:

    CPPunit, C++Test, Googletest?

  • Installers Builder

    CPack (part of CMake seems great too).

  • Hardware:

    Preferably, one single machine with VirtualBox or VMWare. is it only possible? Would it be better to use Linux for such things? Or would a MAC mini be sufficient?

So, has anyone here already built something similar? With which tools exactly?

Thanks for any comments and suggestions.


Solution

  • I have successfully used CMake/CTest/CPack with Jenkins, there is a CMake builder plugin available.

    I found the ctest --output-on-failure option to be useful as the output from the test is shown in the Jenkins log on failure.

    I use the Boost.Test framework for testing C++, it works fine with ctest, I run it with the -l all option to get all the logging output when something goes wrong.