---
short-description: Definition of build targets
...

# Build targets

Meson provides three kinds of build targets: executables, static
libraries and shared libraries. They are created with the commands
`executable`, `static_library` and `shared_library`, respectively. All
objects created in this way are **immutable**. That is, you can not
change any aspect of them after they have been constructed. This
ensures that all information pertaining to a given build target is
specified in one well defined place.

As an example, here is how you would build a shared library.

```meson
project('shared lib', 'c')
shared_library('mylib', 'source.c')
```

In Unix-like operating systems, shared libraries can be
versioned. Meson supports this with keyword arguments.

```meson
project('shared lib', 'c')
shared_library('mylib', 'source.c', version : '1.2.3', soversion : '0')
```

It is common to build a library and then an executable that links
against it. This is supported as well.

```meson
project('shared lib', 'c')
lib = shared_library('mylib', 'source.c')
executable('program', 'prog.c', link_with : lib)
```

Meson sets things up so that the resulting executable can be run
directly from the build directory. There is no need to write shell
scripts or set environment variables.

One target can have multiple language source files.

```meson
project('multilang', 'c', 'cpp')
executable('multiexe', 'file.c', 'file2.cc')
```

Object files
--

Sometimes you can't build files from sources but need to utilize an
existing object file. A typical case is using an object file provided
by a third party. Object files can be specified just like sources.

```meson
exe = executable('myexe', 'source.cpp', objects : 'third_party_object.o')
```

A different case is when you want to use object files built in one
target directly in another. A typical case is when you build a shared
library and it has an internal class that is not exported in the
ABI. This means you can't access it even if you link against the
library. Typical workarounds for this include building both a shared
and static version of the library or putting the source file in the
test executable's source list. Both of these approaches cause the
source to be built twice, which is slow.

In Meson you can extract object files from targets and use them as-is
on other targets. This is the syntax for it.

```meson
lib = shared_library('somelib', 'internalclass.cc', 'file.cc', ...)
eo = lib.extract_objects('internalclass.cc')
executable('classtest', 'classtest.cpp', objects : eo)
```

Here we take the internal class object and use it directly in the
test. The source file is only compiled once.

Note that careless use of this feature may cause strange bugs. As an
example trying to use objects of an executable or static library in a
shared library will not work because shared library objects require
special compiler flags. Getting this right is the user's
responsibility. For this reason it is strongly recommended that you
only use this feature for generating unit test executables in the
manner described above.
