aboutsummaryrefslogtreecommitdiff
path: root/docs/markdown/Running-Meson.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/markdown/Running-Meson.md')
-rw-r--r--docs/markdown/Running-Meson.md176
1 files changed, 94 insertions, 82 deletions
diff --git a/docs/markdown/Running-Meson.md b/docs/markdown/Running-Meson.md
index eb4da77..84dc6a3 100644
--- a/docs/markdown/Running-Meson.md
+++ b/docs/markdown/Running-Meson.md
@@ -4,22 +4,25 @@ short-description: Building a project with Meson
# Running Meson
-There are two different ways of invoking Meson. First, you can run it directly
-from the source tree with the command `/path/to/source/meson.py`. Meson may
-also be installed in which case the command is simply `meson`. In this manual
-we only use the latter format for simplicity.
+There are two different ways of invoking Meson. First, you can run it
+directly from the source tree with the command
+`/path/to/source/meson.py`. Meson may also be installed in which case
+the command is simply `meson`. In this manual we only use the latter
+format for simplicity.
-At the time of writing only a command line version of Meson is available. This
-means that Meson must be invoked using the terminal. If you wish to use the
-MSVC compiler, you need to run Meson under "Visual Studio command prompt".
+At the time of writing only a command line version of Meson is
+available. This means that Meson must be invoked using the terminal.
+If you wish to use the MSVC compiler, you need to run Meson under
+"Visual Studio command prompt".
-All available meson commands are listed on the [commands reference page](Commands.md).
+All available meson commands are listed on the [commands reference
+page](Commands.md).
## Configuring the build directory
-Let us assume that we have a source tree that has a Meson build system. This
-means that at the topmost directory has a file called `meson.build`. We run the
-following commands to get the build started.
+Let us assume that we have a source tree that has a Meson build
+system. This means that at the topmost directory has a file called
+`meson.build`. We run the following commands to get the build started.
```sh
cd /path/to/source/root
@@ -30,18 +33,18 @@ We invoke Meson with the `setup` command, giving it the location of the build
directory. Meson uses [out of source
builds](http://voices.canonical.com/jussi.pakkanen/2013/04/16/why-you-should-consider-using-separate-build-directories/).
-Hint: The syntax of meson is `meson [command] [arguments] [options]`. The
-`setup` command takes a `builddir` and a `srcdir` argument. If no `srcdir` is
-given Meson will deduce the `srcdir` based on `pwd` and the location of
-`meson.build`.
+Hint: The syntax of meson is `meson [command] [arguments] [options]`.
+The `setup` command takes a `builddir` and a `srcdir` argument. If no
+`srcdir` is given Meson will deduce the `srcdir` based on `pwd` and
+the location of `meson.build`.
-Meson then loads the build configuration file and writes the corresponding
-build backend in the build directory. By default Meson generates a *debug
-build*, which turns on basic warnings and debug information and disables
-compiler optimizations.
+Meson then loads the build configuration file and writes the
+corresponding build backend in the build directory. By default Meson
+generates a *debug build*, which turns on basic warnings and debug
+information and disables compiler optimizations.
-Additionally, the invocation can pass options to meson. The list of options is
-documented [here](Builtin-options.md).
+Additionally, the invocation can pass options to meson. The list of
+options is documented [here](Builtin-options.md).
You can specify a different type of build with the `--buildtype` command line
argument. It can have one of the following values.
@@ -53,57 +56,61 @@ argument. It can have one of the following values.
| `debugoptimized` | debug info is generated and the code is optimized (on most compilers this means `-g -O2`) |
| `release` | full optimization, no debug info |
-The build directory is mandatory. The reason for this is that it simplifies the
-build process immensely. Meson will not under any circumstances write files
-inside the source directory (if it does, it is a bug and should be fixed). This
-means that the user does not need to add a bunch of files to their revision
-control's ignore list. It also means that you can create arbitrarily many build
-directories for any given source tree.
+The build directory is mandatory. The reason for this is that it
+simplifies the build process immensely. Meson will not under any
+circumstances write files inside the source directory (if it does, it
+is a bug and should be fixed). This means that the user does not need
+to add a bunch of files to their revision control's ignore list. It
+also means that you can create arbitrarily many build directories for
+any given source tree.
-For example, if we wanted to test building the source code with the Clang
-compiler instead of the system default, we could just type the following
-commands:
+For example, if we wanted to test building the source code with the
+Clang compiler instead of the system default, we could just type the
+following commands:
```sh
cd /path/to/source/root
CC=clang CXX=clang++ meson setup buildclang
```
-This separation is even more powerful if your code has multiple configuration
-options (such as multiple data backends). You can create a separate
-subdirectory for each of them. You can also have build directories for
-optimized builds, code coverage, static analysis and so on. They are all neatly
-separated and use the same source tree. Changing between different
-configurations is just a question of changing to the corresponding directory.
+This separation is even more powerful if your code has multiple
+configuration options (such as multiple data backends). You can create
+a separate subdirectory for each of them. You can also have build
+directories for optimized builds, code coverage, static analysis and
+so on. They are all neatly separated and use the same source tree.
+Changing between different configurations is just a question of
+changing to the corresponding directory.
-Unless otherwise mentioned, all following command line invocations are meant to
-be run in the source directory.
+Unless otherwise mentioned, all following command line invocations are
+meant to be run in the source directory.
-By default Meson will use the Ninja backend to build your project. If you wish
-to use any of the other backends, you need to pass the corresponding argument
-during configuration time. As an example, here is how you would use Meson to
-generate a Visual studio solution.
+By default Meson will use the Ninja backend to build your project. If
+you wish to use any of the other backends, you need to pass the
+corresponding argument during configuration time. As an example, here
+is how you would use Meson to generate a Visual studio solution.
```sh
meson setup <build dir> --backend=vs
```
-You can then open the generated solution with Visual Studio and compile it in
-the usual way. A list of backends can be obtained with `meson setup --help`.
+You can then open the generated solution with Visual Studio and
+compile it in the usual way. A list of backends can be obtained with
+`meson setup --help`.
## Environment variables
-Sometimes you want to add extra compiler flags, this can be done by passing
-them in environment variables when calling meson. See [the reference
-tables](Reference-tables.md#compiler-and-linker-flag-environment-variables) for
-a list of all the environment variables. Be aware however these environment
-variables are only used for the native compiler and will not affect the
-compiler used for cross-compiling, where the flags specified in the cross file
-will be used.
+Sometimes you want to add extra compiler flags, this can be done by
+passing them in environment variables when calling meson. See [the
+reference
+tables](Reference-tables.md#compiler-and-linker-flag-environment-variables)
+for a list of all the environment variables. Be aware however these
+environment variables are only used for the native compiler and will
+not affect the compiler used for cross-compiling, where the flags
+specified in the cross file will be used.
-Furthermore it is possible to stop meson from adding flags itself by using the
-`--buildtype=plain` option, in this case you must provide the full compiler and
-linker arguments needed.
+Furthermore it is possible to stop meson from adding flags itself by
+using the `--buildtype=plain` option, in this case you must provide
+the full compiler and linker arguments needed.
## Building from the source
@@ -117,31 +124,34 @@ See [`meson compile` description](Commands.md#compile) for more info.
### Building directly with ninja
-By default Meson uses the [Ninja build system](https://ninja-build.org/) to
-actually build the code. To start the build, simply type the following command.
+By default Meson uses the [Ninja build
+system](https://ninja-build.org/) to actually build the code. To start
+the build, simply type the following command.
```sh
ninja -C builddir
```
-The main usability difference between Ninja and Make is that Ninja will
-automatically detect the number of CPUs in your computer and parallelize itself
-accordingly. You can override the amount of parallel processes used with the
-command line argument `-j <num processes>`.
-
-It should be noted that after the initial configure step `ninja` is the only
-command you ever need to type to compile. No matter how you alter your source
-tree (short of moving it to a completely new location), Meson will detect the
-changes and regenerate itself accordingly. This is especially handy if you have
-multiple build directories. Often one of them is used for development (the
-"debug" build) and others only every now and then (such as a "static analysis"
-build). Any configuration can be built just by `cd`'ing to the corresponding
-directory and running Ninja.
+The main usability difference between Ninja and Make is that Ninja
+will automatically detect the number of CPUs in your computer and
+parallelize itself accordingly. You can override the amount of
+parallel processes used with the command line argument `-j <num
+processes>`.
+
+It should be noted that after the initial configure step `ninja` is
+the only command you ever need to type to compile. No matter how you
+alter your source tree (short of moving it to a completely new
+location), Meson will detect the changes and regenerate itself
+accordingly. This is especially handy if you have multiple build
+directories. Often one of them is used for development (the "debug"
+build) and others only every now and then (such as a "static analysis"
+build). Any configuration can be built just by `cd`'ing to the
+corresponding directory and running Ninja.
## Running tests
-Meson provides native support for running tests. The command to do that is
-simple.
+Meson provides native support for running tests. The command to do
+that is simple.
```sh
meson test -C builddir
@@ -149,8 +159,8 @@ meson test -C builddir
See [`meson test` description](Commands.md#test) for more info.
-Meson does not force the use of any particular testing framework. You are free
-to use GTest, Boost Test, Check or even custom executables.
+Meson does not force the use of any particular testing framework. You
+are free to use GTest, Boost Test, Check or even custom executables.
Note: it can be also invoked directly with ninja with the following command:
```sh
@@ -171,28 +181,30 @@ Note that Meson will only install build targets explicitly tagged as
installable, as detailed in the [installing targets
documentation](Installing.md).
-By default Meson installs to `/usr/local`. This can be changed by passing the
-command line argument `--prefix /your/prefix` to Meson during configure time.
-Meson also supports the `DESTDIR` variable used in e.g. building packages. It
-is used like this:
+By default Meson installs to `/usr/local`. This can be changed by
+passing the command line argument `--prefix /your/prefix` to Meson
+during configure time. Meson also supports the `DESTDIR` variable used
+in e.g. building packages. It is used like this:
```sh
DESTDIR=/path/to/staging meson install -C builddir
```
-Note: it can be also invoked directly with ninja with the following command:
+Note: it can be also invoked directly with ninja with the following
+command:
+
```sh
ninja -C builddir install
```
## Command line help
-Meson has a standard command line help feature. It can be accessed with the
-following command.
+Meson has a standard command line help feature. It can be accessed
+with the following command.
meson --help
## Exit status
-Meson exits with status 0 if successful, 1 for problems with the command line
-or meson.build file, and 2 for internal errors.
+Meson exits with status 0 if successful, 1 for problems with the
+command line or meson.build file, and 2 for internal errors.