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

    Diagram

    Build Systems

    GNU Make

    Quite OK for (very) 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 techincal 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.