developers, architects
1 day

For many years C++ did not have a good and widely adopted build system and dependency manager. What we had was considered messy, hard, and limited. The situation has changed with the introduction of Modern CMake and Conan package manager. Both of the tools are free and open-sourced.

CMake is de-facto standard for C++. It is widely supported by nearly all IDEs and, together with the Ninja generator, delivers probably the fastest build times for large C++ projects. A "Modern CMake" is a subset of old CMake features with the addition of so-called "targets". It allows equipping our projects with an easy to create and maintain build systems.

Conan is a dependency and package manager specifically designed and optimized for accelerating the development and Continuous Integration of C and C++ projects. It has capabilities to build-from source and full binary management. Thanks to that it can create and reuse any number of different binaries for different configurations and any number of different versions of a package, using the same process in all platforms. As it is decentralized, it is easy to run your server to host your packages and binaries privately, without needing to share them. Those features make Conan an excellent solution for enterprise needs.

The training is recommended to all C++ developers and architects. It should be considered mandatory for those that develop or distribute C++ library projects.

Note: This is not a complete CMake and Conan training. The workshop scopes on teaching on how to use Modern CMake and Conan to end up with a successful project that is easy to build, distribute/share, and maintain. In case you are interested in a full CMake or Conan training please let us know.


  • Understanding of the issues with legacy CMake approach and dependency management
  • Emphasis on Modern CMake, libraries encapsulation, and transitivity
  • Realizing how Conan can improve dependencies handling and package management in your organization


The following plan is an initial proposal for the training material. The final agenda is always created based on the individual pre-training analysis of the client's requirements and constraints.

  1. Modern CMake
    1. Command Line usage and out-of-source builds
    2. Code Generators and Ninja
    3. The worst mistakes of a Legacy CMake
    4. Targets, encapsulation, and transitivity
    5. Pseudo targets
    6. Installation
    7. Testing support
    8. Proper library encapsulation BKMs
    9. Project Configuration and Building System Generation phases
    10. Generator expressions
  2. Conan
    1. Command Line usage
    2. Profiles, settings, options
    3. Installing dependencies
    4. Package creation scenarios
    5. Uploading packages
    6. Developing packages
  3. Conan + CMake
    1. Conan CMake generator
    2. Using Conan dependencies in CMake
    3. Reusing CMake project installation process in Conan
developers, architects
1 day


Mateusz Pusz