| --- |
| title: Comparisons |
| ... |
| |
| # Comparing Meson with other build systems |
| |
| A common question is *Why should I choose Meson over a different build |
| system X?* There is no one true answer to this as it depends on the |
| use case. Almost all build systems have all the functionality needed |
| to build medium-to-large projects so the decision is usually made on |
| other points. Here we list some pros and cons of various build systems |
| to help you do the decision yourself. |
| |
| ## GNU Autotools |
| |
| ### Pros |
| |
| Excellent support for legacy Unix platforms, large selection of |
| existing modules. |
| |
| ### Cons |
| |
| Needlessly slow, complicated, hard to use correctly, unreliable, |
| painful to debug, incomprehensible for most people, poor support for |
| non-Unix platforms (especially Windows). |
| |
| ## CMake |
| |
| ### Pros |
| |
| Great support for multiple backends (Visual Studio, XCode, etc). |
| |
| ### Cons |
| |
| The scripting language is cumbersome to work with. Some simple things |
| are more complicated than necessary. |
| |
| ## SCons |
| |
| ### Pros |
| |
| Full power of Python available for defining your build. |
| |
| ### Cons |
| |
| Slow. Requires you to pass your configuration settings on every |
| invocation. That is, if you do `scons OPT1 OPT2` and then just |
| `scons`, it will reconfigure everything without settings `OPT1` and |
| `OPT2`. Every other build system remembers build options from the |
| previous invocation. |
| |
| ## Bazel |
| |
| ### Pros |
| |
| Proven to scale to very large projects. |
| |
| ### Cons |
| |
| Implemented in Java. Poor Windows support. Heavily focused on Google's |
| way of doing things (which may be a good or a bad thing). Contributing |
| code requires [signing a CLA](https://bazel.build/contributing.html). |
| |
| ## Meson |
| |
| ### Pros |
| |
| The fastest build system [see |
| measurements](Performance-comparison.md), user friendly, designed to |
| be as invisible to the developer as possible, native support for |
| modern tools (precompiled headers, coverage, Valgrind etc). Not Turing |
| complete so build definition files are easy to read and understand. |
| |
| ### Cons |
| |
| Relatively new so it does not have a large user base yet, and may thus |
| contain some unknown bugs. Visual Studio and XCode backends not as |
| high quality as Ninja one. |