Add description on how to use external and internal dependencies interchangeably.

pull/2595/head
Jussi Pakkanen 7 years ago
parent 9426033e97
commit 8d6e3cad1b
  1. 63
      docs/markdown/Dependencies.md

@ -45,7 +45,52 @@ non-found dependencies.
The dependency detector works with all libraries that provide a The dependency detector works with all libraries that provide a
`pkg-config` file. Unfortunately several packages don't provide `pkg-config` file. Unfortunately several packages don't provide
pkg-config files. Meson has autodetection support for some of these. pkg-config files. Meson has autodetection support for some of these,
and they are described later on this page.
# Declaring your own
You can declare your own dependency objects that can be used
interchangeably with dependency objects obtained from the system. The
syntax is straightforward:
```meson
my_inc = include_directories(...)
my_lib = static_library(...)
my_dep = declare_dependency(link_with : my_lib,
include_directories : my_inc)
```
This declares a dependency that adds the given include directories and
static library to any target you use it in.
# Building dependencies as subprojects
Many platforms do not provide a system package manager. On these
systems dependencies must be compiled from source. Meson's subprojects
make it simple to use system dependencies when they are available and
to build dependencies manually when they are not.
To make this work, the dependency must have Meson build definitions
and it must declare its own dependency like this:
foo_dep = declare_dependency(...)
Then any project that wants to use it can write out the following
declaration in their main `meson.build` file.
foo_dep = dependency('foo', fallback : ['foo', 'foo_dep'])
What this declaration means is that first Meson tries to look up the
dependency from the system (such as by using pkg-config). If it is not
available, then it builds subproject named `foo` and from that
extracts a variable `foo_dep`. That means that the return value of
this function is either an external or an internal dependency
object. Since they can be used interchangeably, the rest of the build
definitions do not need to care which one it is. Meson will take care
of all the work behind the scenes to make this work.
# Dependencies with custom lookup functionality
## Boost ## Boost
@ -162,19 +207,3 @@ automatically:
```meson ```meson
libwmf_dep = dependency('libwmf', version : '>=0.2.8') libwmf_dep = dependency('libwmf', version : '>=0.2.8')
``` ```
## Declaring your own
You can declare your own dependency objects that can be used
interchangeably with dependency objects obtained from the system. The
syntax is straightforward:
```meson
my_inc = include_directories(...)
my_lib = static_library(...)
my_dep = declare_dependency(link_with : my_lib,
include_directories : my_inc)
```
This declares a dependency that adds the given include directories and
static library to any target you use it in.

Loading…
Cancel
Save