Beginner's Guide
    First Steps
    Input & Output
    Basic Custom Types
    Diagnostics
    Standard Library
    Code Organization
    Powerful Custom Types
    Generic Programming
    Memory Management
    Software Design Basics

    Separate CompilationSeparate CompilationSeparate 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

    • Command-line based build system from Microsoft packaged with Microsoft Visual Studio , but also available as stand-alone application.
    • XML-based build files
    • supported by , C++Builder

    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.