| --- |
| 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. |