| --- | |
| short-description: Simple project step by step explanation | |
| ... | |
| # Meson sample | |
| A Meson file that builds an executable looks like this. | |
| ```meson | |
| project('simple', 'c') | |
| executable('myexe', 'source.c') | |
| ``` | |
| All Meson build definitions begin with the `project` command. It | |
| specifies the name of the project and what programming languages it | |
| uses. Here the project is called *simple* and it uses only the C | |
| programming language. All strings are single-quoted. | |
| On the next line we define a *build target*, in this case an | |
| executable called *myexe*. It consists of one source file. This is all | |
| the code that a user needs to write to compile an executable with | |
| Meson. | |
| Variables are fully supported. The above code snippet could also have | |
| been declared like this. | |
| ```meson | |
| project('simple', 'c') | |
| src = 'source.c' | |
| executable('myexe', src) | |
| ``` | |
| Most executables consist of more than one source file. The easiest way | |
| to deal with this is to put them in an array. | |
| ```meson | |
| project('simple', 'c') | |
| src = ['source1.c', 'source2.c', 'source3.c'] | |
| executable('myexe', src) | |
| ``` | |
| Meson also supports the notion of *keyword arguments*. Indeed most | |
| arguments to functions can only be passed using them. The above | |
| snippet could be rewritten like this. | |
| ```meson | |
| project('simple', 'c') | |
| src = ['source1.c', 'source2.c', 'source3.c'] | |
| executable('myexe', sources : src) | |
| ``` | |
| These two formats are equivalent and choosing one over the other is | |
| mostly a question of personal preference. | |
| The `executable` command actually returns an *executable object*, | |
| which represents the given build target. It can be passed on to other | |
| functions, like this. | |
| ```meson | |
| project('simple', 'c') | |
| src = ['source1.c', 'source2.c', 'source3.c'] | |
| exe = executable('myexe', src) | |
| test('simple test', exe) | |
| ``` | |
| Here we create a unit test called *simple test*, and which uses the | |
| built executable. When the tests are run with the `meson test` | |
| command, the built executable is run. If it returns zero, the test | |
| passes. A non-zero return value indicates an error, which Meson will | |
| then report to the user. | |
| A note to Visual Studio users | |
| ----- | |
| There's a slight terminology difference between Meson and Visual | |
| Studio. A Meson *project* is the equivalent to a Visual Studio | |
| *solution*. That is, the topmost thing that encompasses all things to | |
| be built. A Visual Studio *project* on the other hand is the | |
| equivalent of a Meson top level build target, such as an executable or | |
| a shared library. |