|
|
|
---
|
|
|
|
short-description: Targets to run external commands
|
|
|
|
...
|
|
|
|
|
|
|
|
# Run targets
|
|
|
|
|
|
|
|
Sometimes you need to have a target that just runs an external
|
|
|
|
command. As an example you might have a build target that reformats
|
|
|
|
your source code, runs `cppcheck` or something similar. In Meson this
|
|
|
|
is accomplished with a so called *run target*.
|
|
|
|
|
|
|
|
The recommended way of doing this is writing the command(s) you want
|
|
|
|
to run to a script file. Here's an example script.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
cd "${MESON_SOURCE_ROOT}"
|
|
|
|
inspector_command -o "${MESON_BUILD_ROOT}/inspection_result.txt"
|
|
|
|
```
|
|
|
|
|
|
|
|
Note the two environment variables `MESON_SOURCE_ROOT` and
|
|
|
|
`MESON_BUILD_ROOT`. These are absolute paths to your project's source
|
|
|
|
and build directories and they are automatically set up by Meson. In
|
|
|
|
addition to these Meson also sets up the variable `MESON_SUBDIR`,
|
|
|
|
which points to the subdirectory where the run command was specified.
|
|
|
|
Most commands don't need to set up this.
|
|
|
|
|
|
|
|
Note how the script starts by cd'ing into the source dir. Meson does
|
|
|
|
not guarantee that the script is run in any specific directory.
|
|
|
|
Whether you need to do the same depends on what your custom target
|
|
|
|
wants to do.
|
|
|
|
|
|
|
|
To make this a run target we write it to a script file called
|
|
|
|
`scripts/inspect.sh` and specify it in the top level Meson file like
|
|
|
|
this.
|
|
|
|
|
|
|
|
```meson
|
|
|
|
run_target('inspector',
|
|
|
|
command : 'scripts/inspect.sh')
|
|
|
|
```
|
|
|
|
|
|
|
|
Run targets are not run by default. To run it run the following command.
|
|
|
|
|
|
|
|
```console
|
|
|
|
$ meson compile inspector
|
|
|
|
```
|
|
|
|
|
|
|
|
All additional entries in `run_target`'s `command` array are passed
|
|
|
|
unchanged to the inspector script, so you can do things like this:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
run_target('inspector',
|
|
|
|
command : ['scripts/inspect.sh', '--exclude', 'tests'])
|
|
|
|
```
|