Other workshops

Send us a request

Interested in this workshop? Please contact us:

Make a request

Certificates

Build systems and software dependency management

In today’s world of software engineering with its increasingly fast release cycles, process automation together with a good architecture are key components for building, deploying and shipping software products professionally. Additionally, short feedback loops during development are important in order to move forward in small steps, allowing for quick experiments and efficient debugging. A deterministic deployment also leaves less room for errors and is the foundation for reproducible builds.

Standing on the shoulders of giants, today’s software is rarely built without a set of other, thirdparty software and libraries. However, integrating software tools and libraries into a C or C++ project is still not an easy task.

CMake and Conan

In the C and C++ development world the most commonly used build tool is CMake. So much that it has become the de facto standard for defining and integrating all parts of the software delivery process. As CMake has developed a lot over the last years, a certain subset of best practices often described as Modern CMake has emerged.

However, one of its weak points has always been the integration of thirdparty software packages (besides commonly used approaches that are coined under the term CMake Superbuilds. This is now solved with the advent of Conan, an open source, decentralized and multi-platform package manager for C and C++ projects. We receive more and more project requests for implementing this approach in an existing software environment and can see that the industry is slowly adapting this tool as another standard way to integrate a large set of dependencies.

This workshop will discuss the current techniques and tools for proper software dependency management in C and C++ based projects and gives concrete, actionable advice on how to integrate and maintain external software packages properly.

Outline

  • Understanding build process
  • ABI vs API
  • Linking software (dynamically vs. statically)
  • Build system architectures and approaches
  • CMake, CMake Superbuilds
  • Conan / build2
  • Approaches for storage of binary artifacts