---
title: Quickstart Guide
short-description: Getting Started using Mesonbuild
...

# Using Meson

Meson has been designed to be as simple to use as possible. This page
outlines the initial steps needed for installation, troubleshooting,
and standard use.

For more advanced configuration please refer to the command line help
`meson --help` or the Meson documentation located at the
[Mesonbuild](https://mesonbuild.com) website.

Table of Contents:
* [Requirements](#requirements)
* [Installation using package manager](#installation-using-package-manager)
* [Installation using Python](#installation-using-python)
* [Installation from source](#installation-from-source)
* [Troubleshooting](#troubleshooting)
* [Compiling a Meson project](#compiling-a-meson-project)
* [Using Meson as a distro packager](#using-meson-as-a-distro-packager)

Requirements
--

* [Python 3](https://python.org)
* [Ninja](https://github.com/ninja-build/ninja/)

*Ninja is only needed if you use the Ninja backend. Meson can also
generate native VS and XCode project files.*


Installation using package manager
--

Ubuntu:

```console
$ sudo apt-get install python3 python3-pip python3-setuptools \
                       python3-wheel ninja-build
```
*Due to our frequent release cycle and development speed, distro packaged software may quickly become outdated.*

Installation using Python
--
Requirements: **pip3**

The best way to receive the most up-to-date version of Mesonbuild.

Install as a local user (recommended):
```console
$ pip3 install --user meson
```
Install as root:
```console
$ pip3 install meson
```

*If you are unsure whether to install as root or a local user, install
 as a local user.*


Installation from source
--
Requirements: **git**

Meson can be run directly from the cloned git repository.

```console
$ git clone https://github.com/mesonbuild/meson.git /path/to/sourcedir
```
Troubleshooting:
--
Common Issues:
```console
$ meson builddir
$ bash: /usr/bin/meson: No such file or directory
```

Description: The default installation prefix for the python pip module
installation is not included in your shell environment PATH. The
default prefix for python pip installation modules is located under
``/usr/local``.

**Resolution:
This issue can be resolved by altering the default shell environment
PATH to include ``/usr/local/bin``. **

*Note: There are other ways of fixing this issue such as using
 symlinks or copying the binaries to a default path and these methods
 are not recommended or supported as they may break package management
 interoperability.*


Compiling a Meson project
--

The most common use case of Meson is compiling code on a code base you
are working on. The steps to take are very simple.

```console
$ cd /path/to/source/root
$ meson builddir && cd builddir
$ meson compile
$ meson test
```

The only thing to note is that you need to create a separate build
directory. Meson will not allow you to build source code inside your
source tree. All build artifacts are stored in the build directory.
This allows you to have multiple build trees with different
configurations at the same time. This way generated files are not
added into revision control by accident.

To recompile after code changes, just type `meson compile`. The build
command is always the same. You can do arbitrary changes to source
code and build system files and Meson will detect those and will do
the right thing. If you want to build optimized binaries, just use the
argument `--buildtype=debugoptimized` when running Meson. It is
recommended that you keep one build directory for unoptimized builds
and one for optimized ones. To compile any given configuration, just
go into the corresponding build directory and run `meson compile`.

Meson will automatically add compiler flags to enable debug
information and compiler warnings (i.e. `-g` and `-Wall`). This means
the user does not have to deal with them and can instead focus on
coding.

Using Meson as a distro packager
--

Distro packagers usually want total control on the build flags
used. Meson supports this use case natively. The commands needed to
build and install Meson projects are the following.

```console
$ cd /path/to/source/root
$ meson --prefix /usr --buildtype=plain builddir -Dc_args=... -Dcpp_args=... -Dc_link_args=... -Dcpp_link_args=...
$ meson compile -C builddir
$ meson test -C builddir
$ DESTDIR=/path/to/staging/root meson install -C builddir
```

The command line switch `--buildtype=plain` tells Meson not to add its
own flags to the command line. This gives the packager total control
on used flags.

This is very similar to other build systems. The only difference is
that the `DESTDIR` variable is passed as an environment variable
rather than as an argument to `meson install`.

As distro builds happen always from scratch, you might consider
enabling [unity builds](Unity-builds.md) on your packages because they
are faster and produce better code. However there are many projects
that do not build with unity builds enabled so the decision to use
unity builds must be done by the packager on a case by case basis.
