| .TH MESON "1" "October 2024" "meson 1.6.0" "User Commands" |
| .SH NAME |
| meson - a high productivity build system |
| .SH DESCRIPTION |
| |
| Meson is a build system designed to optimize programmer |
| productivity. It aims to do this by providing simple, out-of-the-box |
| support for modern software development tools and practices, such as |
| unit tests, coverage reports, Valgrind, Ccache and the like. |
| |
| The main Meson executable provides many subcommands to access all |
| the functionality. |
| |
| .SH The setup command |
| |
| Using Meson is simple and follows the common two-phase |
| process of most build systems. First you run Meson to |
| configure your build: |
| |
| .B meson setup [ |
| .I options |
| .B ] [ |
| .I build directory |
| .B ] [ |
| .I source directory |
| .B ] |
| |
| Note that the build directory must be different from the source |
| directory. Meson does not support building inside the source directory |
| and attempting to do that leads to an error. |
| |
| After a successful configuration step you can build the source by |
| running the actual build command in the build directory. The default |
| backend of Meson is Ninja, which can be invoked like this. |
| |
| \fBninja [\fR \fItarget\fR \fB]\fR |
| |
| You only need to run the Meson command once: when you first configure |
| your build dir. After that you just run the build command. Meson will |
| autodetect changes in your source tree and regenerate all files |
| needed to build the project. |
| |
| The setup command is the default operation. If no actual command is |
| specified, Meson will assume you meant to do a setup. That means |
| that you can set up a build directory without the setup command |
| like this: |
| |
| .B meson [ |
| .I options |
| .B ] [ |
| .I build directory |
| .B ] [ |
| .I source directory |
| .B ] |
| |
| .SS "options:" |
| .TP |
| \fB\-\-version\fR |
| print version number |
| .TP |
| \fB\-\-help\fR |
| print command line help |
| |
| .SH The configure command |
| |
| .B meson configure |
| provides a way to configure a Meson project from the command line. |
| Its usage is simple: |
| |
| .B meson configure [ |
| .I build directory |
| .B ] [ |
| .I options to set |
| .B ] |
| |
| If build directory is omitted, the current directory is used instead. |
| |
| If no parameters are set, |
| .B meson configure |
| will print the value of all build options to the console. |
| |
| To set values, use the \-D command line argument like this. |
| |
| .B meson configure \-Dopt1=value1 \-Dopt2=value2 |
| |
| .SH The dist command |
| |
| .B meson dist |
| generates a release archive. |
| |
| .B meson dist [ |
| .I options |
| .B ] |
| |
| .SS "options:" |
| .TP |
| \fB\-h, \-\-help\fR |
| show this help message and exit |
| |
| .TP |
| \fB\-C WD\fR |
| directory to cd into before running |
| |
| .TP |
| \fB\-\-allow-dirty\fR |
| Allow even when repository contains uncommitted changes. |
| |
| .TP |
| \fB\-\-formats FORMATS\fR |
| Comma separated list of archive types to create. Supports xztar |
| (default), gztar, and zip. |
| |
| .TP |
| \fB\-\-include\-subprojects\fR |
| Include source code of subprojects that have been used for the build. |
| |
| .TP |
| \fB\-\-no\-tests\fR |
| Do not build and test generated packages. |
| |
| .SH The install command |
| |
| .B meson install |
| installs the project. |
| |
| .B meson install [ |
| .I options |
| .B ] |
| |
| .SS "options:" |
| |
| .TP |
| \fB\-h, \-\-help\fR |
| show this help message and exit |
| |
| .TP |
| \fB\-C WD\fR |
| directory to cd into before running |
| |
| .TP |
| \fB\-\-no-rebuild\fR |
| Do not rebuild before installing. |
| |
| .TP |
| \fB\-\-only\-changed\fR |
| Only overwrite files that are older than the copied file. |
| |
| .TP |
| \fB\-\-quiet\fR |
| Do not print every file that was installed. |
| |
| .TP |
| \fB\-\-destdir DESTDIR\fR |
| Sets or overrides DESTDIR environment. (Since 0.57.0) |
| |
| .TP |
| \fB\-\-dry\-run, \-n\fR |
| Doesn't actually install, but print logs. (Since 0.57.0) |
| |
| .TP |
| \fB\-\-skip\-subprojects [SKIP_SUBPROJECTS]\fR |
| Do not install files from given subprojects. (Since 0.58.0) |
| |
| .TP |
| \fB\-\-tags TAGS\fR |
| Install only targets having one of the given tags. (Since 0.60.0) |
| |
| .TP |
| \fB\-\-strip\fR |
| Strip targets even if strip option was not set during |
| configure. (Since 0.62.0) |
| |
| .SH The introspect command |
| |
| Meson introspect is a command designed to make it simple to integrate with |
| other tools, such as IDEs. The output of this command is in JSON. |
| |
| .B meson introspect [ |
| .I build directory |
| .B ] [ |
| .I option |
| .B ] |
| |
| If build directory is omitted, the current directory is used instead. |
| |
| .SS "options:" |
| .TP |
| \fB\-\-targets\fR |
| print all top level targets (executables, libraries, etc) |
| .TP |
| \fB\-\-target\-files\fR |
| print the source files of the given target |
| .TP |
| \fB\-\-buildsystem\-files\fR |
| print all files that make up the build system (meson.build, meson.options, meson_options.txt etc) |
| .TP |
| \fB\-\-tests\fR |
| print all unit tests |
| .TP |
| \fB\-\-help\fR |
| print command line help |
| |
| .SH The init command |
| |
| .B meson init |
| creates a new project |
| |
| .B meson init [ |
| .I options |
| .B ] [ |
| .I sourcefile... |
| .B ] |
| |
| .SS "positional arguments:" |
| .TP |
| sourcefile... |
| source files. default: all recognized files in current directory |
| |
| .SS "options:" |
| .TP |
| \fB\-h, \-\-help\fR |
| show this help message and exit |
| |
| .TP |
| \fB\-C WD\fR |
| directory to cd into before running |
| |
| .TP |
| \fB\-n NAME, \-\-name NAME\fR |
| project name. default: name of current directory |
| |
| .TP |
| \fB\-e EXECUTABLE, \-\-executable EXECUTABLE\fR |
| executable name. default: project name |
| |
| .TP |
| \fB\-d DEPS, \-\-deps DEPS\fR |
| dependencies, comma-separated |
| |
| .TP |
| \fB\-l {c,cpp,cs,cuda,d,fortran,java,objc,objcpp,rust,vala}, \ |
| \-\-language {c,cpp,cs,cuda,d,fortran,java,objc,objcpp,rust,vala}\fR |
| project language. default: autodetected based on source files |
| |
| .TP |
| \fB\-b, \-\-build |
| build after generation |
| |
| .TP |
| \fB\-\-builddir BUILDDIR\fR |
| directory for build |
| |
| .TP |
| \fB\-f, \-\-force\fR |
| force overwrite of existing files and directories. |
| |
| .TP |
| \fB\-\-type {executable,library}\fR |
| project type. default: executable based project |
| |
| .TP |
| \fB\-\-version VERSION\fR |
| project version. default: 0.1 |
| |
| .SH The test command |
| |
| .B meson test |
| is a helper tool for running test suites of projects using Meson. |
| The default way of running tests is to invoke the default build command: |
| |
| \fBninja [\fR \fItest\fR \fB]\fR |
| |
| .B meson test |
| provides a richer set of tools for invoking tests. |
| |
| .B meson test |
| automatically rebuilds the necessary targets to run tests when used with the Ninja backend. |
| Upon build failure, |
| .B meson test |
| will return an exit code of 125. |
| This return code tells |
| .B git bisect run |
| to skip the current commit. |
| Thus bisecting using git can be done conveniently like this. |
| |
| .B git bisect run meson test -C build_dir |
| |
| .SS "options:" |
| .TP |
| \fB\-\-repeat\fR |
| run tests as many times as specified |
| .TP |
| \fB\-\-gdb\fR |
| run tests under gdb |
| .TP |
| \fB\-\-list\fR |
| list all available tests |
| .TP |
| \fB\-\-wrapper\fR |
| invoke all tests via the given wrapper (e.g. valgrind) |
| .TP |
| \fB\-C\fR |
| Change into the given directory before running tests (must be root of build directory). |
| .TP |
| \fB\-\-suite\fR |
| run tests in this suite |
| .TP |
| \fB\-\-no\-suite\fR |
| do not run tests in this suite |
| .TP |
| \fB\-\-no\-stdsplit\fR |
| do not split stderr and stdout in test logs |
| .TP |
| \fB\-\-benchmark\fR |
| run benchmarks instead of tests |
| .TP |
| \fB\-\-logbase\fR |
| base of file name to use for writing test logs |
| .TP |
| \fB\-\-num-processes\fR |
| how many parallel processes to use to run tests |
| .TP |
| \fB\-\-verbose\fR |
| do not redirect stdout and stderr |
| .TP |
| \fB\-t\fR |
| a multiplier to use for test timeout values (usually something like 100 for Valgrind) |
| .TP |
| \fB\-\-setup\fR |
| use the specified test setup |
| |
| .SH The wrap command |
| |
| Wraptool is a helper utility to manage source dependencies |
| using the online wrapdb service. |
| |
| .B meson wrap < |
| .I command |
| .B > [ |
| .I options |
| .B ] |
| |
| You should run this command in the top level source directory |
| of your project. |
| |
| .SS "Commands:" |
| .TP |
| \fBlist\fR |
| list all available projects |
| .TP |
| \fBsearch\fR |
| search projects by name |
| .TP |
| \fBinstall\fR |
| install a project with the given name |
| .TP |
| \fBupdate\fR |
| update the specified project to latest available version |
| .TP |
| \fBinfo\fR |
| show available versions of the specified project |
| .TP |
| \fBstatus\fR |
| show installed and available versions of currently used subprojects |
| |
| .SH The subprojects command |
| |
| .B meson subprojects |
| is used to manage subprojects. |
| |
| .B meson subprojects [ |
| .I options |
| .B ] [ |
| .I command |
| .B ] |
| |
| .SS "options:" |
| .TP |
| \fB\-h, \-\-help\fR |
| show this help message and exit |
| |
| .SS "commands:" |
| .TP |
| \fBupdate\fR |
| Update all subprojects from wrap files |
| |
| .TP |
| \fBcheckout\fR |
| Checkout a branch (git only) |
| |
| .TP |
| \fBdownload\fR |
| Ensure subprojects are fetched, even if not in use. Already downloaded |
| subprojects are not modified. This can be used to pre-fetch all |
| subprojects and avoid downloads during configure. |
| |
| .TP |
| \fBforeach\fR |
| Execute a command in each subproject directory. |
| |
| .TP |
| \fBpurge\fR |
| Remove all wrap-based subproject artifacts |
| |
| .TP |
| \fBpackagefiles\fR |
| Manage the packagefiles overlay |
| |
| .SH The rewrite command |
| |
| .B meson rewrite |
| modifies the project definition. |
| |
| .B meson rewrite [ |
| .I options |
| .B ] [ |
| .I command |
| .B ] |
| |
| .SS "options:" |
| |
| .TP |
| \fB\-h, \-\-help\fR |
| show this help message and exit |
| |
| .TP |
| \fB\-s SRCDIR, \-\-sourcedir SRCDIR\fR |
| Path to source directory. |
| |
| .TP |
| \fB\-V, \-\-verbose\fR |
| Enable verbose output |
| |
| .TP |
| \fB\-S, \-\-skip\-errors\fR |
| Skip errors instead of aborting |
| |
| .SS "commands:" |
| |
| .TP |
| \fBtarget (tgt)\fR |
| Modify a target |
| |
| .TP |
| \fBkwargs\fR |
| Modify keyword arguments |
| |
| .TP |
| \fBdefault-options (def)\fR |
| Modify the project default options |
| |
| .TP |
| \fBcommand (cmd)\fR |
| Execute a JSON array of commands |
| |
| .SH The compile command |
| |
| .B meson compile |
| builds the project. |
| |
| .B meson compile [ |
| .I options |
| .B ] [ |
| .I TARGET... |
| .B ] |
| |
| .SS "positional arguments:" |
| .TP |
| \fBTARGET\fR |
| Targets to build. Target has the following format: |
| [PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]. |
| |
| .SS "options:" |
| |
| .TP |
| \fB\-h, \-\-help\fR |
| show this help message and exit |
| |
| .TP |
| \fB\-\-clean\fR |
| Clean the build directory. |
| |
| .TP |
| \fB\-C WD\fR |
| directory to cd into before running |
| |
| .TP |
| \fB\-j JOBS, \-\-jobs JOBS\fR |
| The number of worker jobs to run (if supported). If the value is less |
| than 1 the build program will guess. |
| |
| .TP |
| \fB\-l LOAD_AVERAGE, \-\-load-average LOAD_AVERAGE\fR |
| The system load average to try to maintain (if supported). |
| |
| .TP |
| \fB\-v, \-\-verbose\fR |
| Show more verbose output. |
| |
| .TP |
| \fB\-\-ninja\-args NINJA_ARGS\fR |
| Arguments to pass to `ninja` (applied only on `ninja` backend). |
| |
| .TP |
| \fB\-\-vs\-args VS_ARGS\fR |
| Arguments to pass to `msbuild` (applied only on `vs` backend). |
| |
| .TP |
| \fB\-\-xcode\-args XCODE_ARGS\fR |
| Arguments to pass to `xcodebuild` (applied only on `xcode` backend). |
| |
| .SH The devenv command |
| |
| .B meson devenv |
| runs commands in the developer environment. |
| |
| .B meson devenv [ |
| .I options |
| .B ] [ |
| .I command |
| .B ] |
| |
| .SS "positional arguments:" |
| |
| .TP |
| \fBcommand\fR |
| Command to run in developer environment (default: interactive shell) |
| |
| .SS "options:" |
| |
| .TP |
| \fB\-h, \-\-help\fR |
| show this help message and exit |
| |
| .TP |
| \fB\-C BUILDDIR\fR |
| Path to build directory |
| |
| .TP |
| \fB\-\-workdir WORKDIR, \-w WORKDIR\fR |
| Directory to cd into before running (default: builddir, Since 1.0.0) |
| |
| .TP |
| \fB\-\-dump [DUMP]\fR |
| Only print required environment (Since 0.62.0) Takes an optional file |
| path (Since 1.1.0) |
| |
| .TP |
| \fB\-\-dump-format {sh,export,vscode}\fR |
| Format used with --dump (Since 1.1.0) |
| |
| .SH The env2mfile command |
| |
| .B meson env2mfile |
| converts the current environment to a cross or native file. |
| |
| .B meson env2mfile [ |
| .I options |
| .B ] |
| |
| .SS "options:" |
| |
| .TP |
| \fB\-h, \-\-help\fR |
| show this help message and exit |
| |
| .TP |
| \fB\-\-debarch DEBARCH\fR |
| The dpkg architecture to generate. |
| |
| .TP |
| \fB\-\-gccsuffix GCCSUFFIX\fR |
| A particular gcc version suffix if necessary. |
| |
| .TP |
| \fB\-o OUTFILE\fR |
| The output file. |
| |
| .TP |
| \fB\-\-cross\fR |
| Generate a cross compilation file. |
| |
| .TP |
| \fB\-\-native\fR |
| Generate a native compilation file. |
| |
| .TP |
| \fB\-\-system SYSTEM\fR |
| Define system for cross compilation. |
| |
| .TP |
| \fB\-\-subsystem SUBSYSTEM\fR |
| Define subsystem for cross compilation. |
| |
| .TP |
| \fB\-\-kernel KERNEL\fR |
| Define kernel for cross compilation. |
| |
| .TP |
| \fB\-\-cpu CPU\fR |
| Define cpu for cross compilation. |
| |
| .TP |
| \fB\-\-cpu-family CPU_FAMILY\fR |
| Define cpu family for cross compilation. |
| |
| .TP |
| \fB\-\-endian {big,little}\fR |
| Define endianness for cross compilation. |
| |
| .SH The format command |
| |
| .B meson format |
| formats a meson source file. |
| |
| .B meson format [ |
| .I options |
| .B ] [ |
| .I sources... |
| .B ] |
| |
| .SS "positional arguments:" |
| |
| .TP |
| \fBsources...\fR |
| meson source files |
| |
| .SS "options:" |
| |
| .TP |
| \fB-h, --help\fR |
| show this help message and exit |
| |
| .TP |
| \fB-q, --check-only\fR |
| exit with 1 if files would be modified by meson format |
| |
| .TP |
| \fB-i, --inplace\fR |
| format files in-place |
| |
| .TP |
| \fB-r, --recursive\fR |
| recurse subdirs (requires --check-only or --inplace option) |
| |
| .TP |
| \fB-c meson.format, --configuration meson.format\fR |
| read configuration from meson.format |
| |
| .TP |
| \fB-e, --editor-config\fR |
| try to read configuration from .editorconfig |
| |
| .TP |
| \fB-o OUTPUT, --output OUTPUT\fR |
| output file (implies having exactly one input) |
| |
| .SH EXIT STATUS |
| |
| .TP |
| .B 0 |
| Successful. |
| .TP |
| .B 1 |
| Usage error, or an error parsing or executing meson.build. |
| .TP |
| .B 2 |
| Internal error. |
| .TP |
| .B 125 |
| .B meson test |
| could not rebuild the required targets. |
| .TP |
| |
| .SH SEE ALSO |
| |
| http://mesonbuild.com/ |
| |
| https://wrapdb.mesonbuild.com/ |