Beginner's Guide
    First Steps
    Input & Output
    Custom Types – Part 1
    Diagnostics
    Standard Library – Part 1
    Function Objects
    Standard Library – Part 2
    Code Organization
    Custom Types – Part 2
    Generic Programming
    Memory Management
    Software Design Basics

    Separate Compilation Separate Compilation Separate Compilation

    Slides

    slide 2
    slide 3
    slide 4
    slide 5
    slide 6
    slide 7
    slide 8
    slide 9
    slide 10
    slide 11
    slide 12
    slide 13
    slide 14
    slide 15
    slide 16
    slide 17
    slide 18
    slide 19
    slide 20
    slide 21
    slide 22
    slide 23
    slide 24
    slide 25
    slide 26

    Diagram

    Build Systems

    GNU Make

    Quite OK for small projects. Every C++ programmer should know how to use Make.

    • ubiquitous, portable
    • a lot of limitations
    • not very expressive syntax
    CMake

    Seems to be(come) the de-facto standard in the C++ world.

    • available on a lot of platforms
    • lot of tutorials, resources, etc.
    • used as project model by some IDEs
    • can be slow at times
    • carries a lot of technical debt
    • clumsy syntax

    Bazel
    • fast, seems to scale well
    • rather rigid project organization
    • has many dependencies itself
    MSBuild
    build2
    • uniform across platforms, no project generation step
    • supports wildcard patterns
    • support for C++ Modules
    • support for cross-compilation
    • skips recompilation of ignorable changes (comments, whitespaces, etc).
    • dependency management
    • no dependencies, only C++ compiler required
    QMake Part of the Qt Project .
    SCons
    • automatic dependency analysis
    • uses a real programming language (Python) for config files
    • pretty verbose; even common tasks require a lot of code
    • can be slow for big projects
    Premake
    Ninja
    Meson
    FASTbuild
    Gradle
    Waf
    Evoke Fairly new system still under development.
    GNU autotools

    My advice: stay away from autotools if you can.