Welcome to Build System Essentials Tutorial

This tutorials describes how to set up software projects in C++, Java and Python using common build systems in each of the languages. After reading this tutorial you will have a basic understanding of how to build your software in each of these languages in a reliable, flexible and portable (different OSes) way. For each language, the tutorial focuses on a single combination of tools, even though a myriad of comparable solutions are available. The described tools are the ones currently used for building the RSX software and hence are well tested and people in the CoR-Lab have sufficient knowledge with these tools.

Explained Topics

In more detail, we will cover the following aspects for each language:

  • Finding and handling upstream dependencies (in this case RSB)
  • Building libraries usable for other software packages
  • Building executable programs
  • Integrating unit tests in the build system
  • Documentation generation from inside the build system
  • Handling (command line) options
  • Licensing(?)

Tutorial Structure

Each of these aspects are described in the same manner for all three programming languages. For each of these languages the described source code can be downloaded and used as a basis for the own production code.


In case the installation talks about a prefix, this means a folder where software is installed to. It can be freely chosen depending on your own needs.

Build System

These pages describe how to set up a build system for each language which is capable of building libraries and executables or script in way that they are reusable for downstream projects. Additionally, the build system will execute unit tests and generate API documentation.

Option Handling

Providing reusable software projects includes making assumptions configurable. Besides parameters for algorithms, file locations might vary across different platforms and certain features need to be switched on or off depending on the intended usage scenario. It is very important that these parameters can be configured and for each language there are supporting mechanisms which make this task quite simple. We will demonstrate how to parse parameters from the command line of a program. Of course, other possibilities like configuration files exist.

Indices and Tables