Build Systems For C++
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 become 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.