developers, architects
1-6 days

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 Project Structure
    1. How To Handle Dependencies?
    2. Robust Project Structure
    3. In-source Vs Out-of-source builds
  2. Modern CMake (4 days)
    1. Command Line, Generators, and Build Types
    2. A Minimal Project
    3. Targets, Aliases, Encapsulation, And Transitivity
    4. Properties
    5. Subdirectories
    6. Testing Support
    7. Generator Expressions
    8. Installing And Finding Dependencies
    9. Custom Tasks
    10. Version Number and Configured Header Files
    11. Variables
    12. Flow control
    13. Scope
    14. Functions, Macros, And Argument Handling
    15. Math, Strings, and Lists
    16. Modules
    17. Project Installation
    18. Debugging And Diagnostics
  3. Advanced CMake (1 day)
    1. Policies
    2. Custom Build Types
    3. Checking Existence and Support
    4. Invoking Arbitrary Code
    5. Forwarding Command Arguments
    6. Custom Tasks (Configure Stage)
    7. Specifying Version Details
    8. Libraries
    9. Finding Things
    10. Find Modules
    11. External Content
    12. Toolchains And Cross-Compiling
    13. Packaging
    14. Build Performance
    15. Working With Files
  4. Conan (1 day)
    1. Conan Environment
    2. Basic Command Line Usage
    3. Installing Dependencies
    4. Generators
    5. Recipe
    6. Profiles, settings, options
    7. Different Ways To Create a Package
    8. Uploading Packages
    9. Conan Package Tools
developers, architects
1-6 days


Mateusz Pusz