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

# Build targets

Meson provides four kinds of build targets: executables, libraries
(which can be set to be built as static or shared or both of them at
the build configuration time), static libraries, and shared libraries.
They are created with the commands `executable`, `library`,
`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.

Libraries and executables
--

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

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

It is generally preferred to use the `library` command instead of
`shared_library` and `static_library` and then configure which
libraries (static or shared or both of them) will be built at the
build configuration time using the `default_library`
[built-in option](Builtin-options.md).

In Unix-like operating systems, shared libraries can be
versioned. Meson supports this with keyword arguments, which will be
ignored if the library is configured as static at the compile time.

```meson
project('shared lib', 'c')
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 = 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.
