| --- |
| 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']) |
| ``` |