This module is a simple generator for pkg-config files.
pkg = import('pkgconfig') bar_dep = dependency('bar') lib = library('foo', dependencies : [bar]) pkg.generate(lib)
The generated file's properties are specified with the following keyword arguments.
description
a string describing the library, used to set the Description:
fieldextra_cflags
a list of extra compiler flags to be added to the Cflags
field after the header search pathfilebase
the base name to use for the pkg-config file; as an example, the value of libfoo
would produce a pkg-config file called libfoo.pc
install_dir
the directory to install to, defaults to the value of option libdir
followed by /pkgconfig
libraries
a list of built libraries (usually results of shared_library) that the user needs to link against. Arbitrary strings can also be provided and they will be added into the Libs
field. Since 0.45.0 dependencies of built libraries will be automatically added, see the Implicit dependencies section below for the exact rules. Since 0.58.0 custom_target() objects are supported as long as they are linkable (has known extension such as .a
, .so
, etc).libraries_private
list of built libraries or strings to put in the Libs.private
field. Since 0.45.0 dependencies of built libraries will be automatically added, see the Implicit dependencies section below for the exact rules. Since 0.58.0 custom_target() objects are supported as long as they are linkable (has known extension such as .a
, .so
, etc).name
the name of this library, used to set the Name:
fieldsubdirs
which subdirs of include
should be added to the header search path, for example if you install headers into ${PREFIX}/include/foobar-1
, the correct value for this argument would be foobar-1
requires
list of strings, pkgconfig-dependencies or libraries that pkgconfig.generate()
was used on to put in the Requires
fieldrequires_private
the same as requires
but for the Requires.private
fieldurl
a string with a url for the libraryvariables
a list of strings with custom variables to add to the generated file. The strings must be in the form name=value
and may reference other pkgconfig variables, e.g. datadir=${prefix}/share
. The names prefix
, libdir
and includedir
are reserved and may not be used. Since 0.56.0 it can also be a dictionary but ordering of Meson dictionaries are not guaranteed, which could cause issues when some variables reference other variables. Spaces in values are escaped with \
, this is required in the case the value is a path that and is used in cflags
or libs
arguments. Since 0.59.0 if escaping is not desired (e.g. space separate list of values) unescaped_variables
keyword argument should be used instead. Since 0.62.0 builtin directory variables that are referenced are automatically created by default.uninstalled_variables
used instead of the variables
keyword argument, when generating the uninstalled pkg-config file. Since 0.54.0 Spaces in values are escaped with \
, this is required in the case the value is a path that and is used in cflags
or libs
arguments. Since 0.59.0 if escaping is not desired (e.g. space separate list of values) unescaped_uninstalled_variables
keyword argument should be used instead.version
a string describing the version of this library, used to set the Version:
field. (since 0.46.0) Defaults to the project version if unspecified.d_module_versions
a list of module version flags used when compiling D sources referred to by this pkg-config filedataonly
field. (since 0.54.0) this is used for architecture-independent pkg-config files in projects which also have architecture-dependent outputs.conflicts
(since 0.36.0, incorrectly issued a warning prior to 0.54.0) list of strings to be put in the Conflicts
field.Since 0.46 a StaticLibrary
or SharedLibrary
object can optionally be passed as first positional argument. If one is provided a default value will be provided for all required fields of the pc file:
install_dir
is set to pkgconfig
folder in the same location than the provided library.description
is set to the project‘s name followed by the library’s name.name
is set to the library's name.Since 0.54.0 uninstalled pkg-config files are generated as well. They are located in <build dir>/meson-uninstalled/
. It is sometimes useful to build projects against libraries built by Meson without having to install them into a prefix. In order to do so, just set PKG_CONFIG_PATH=<builddir>/meson-uninstalled
before building your application. That will cause pkg-config to prefer those -uninstalled.pc
files and find libraries and headers from the Meson builddir. This is an experimental feature provided on a best-effort basis, it might not work in all use-cases.
The exact rules followed to find dependencies that are implicitly added into the pkg-config file have evolved over time. Here are the rules as of Meson 0.49.0, previous versions might have slightly different behaviour.
Requires.private:
or Libs.private:
) unless they are explicitly added in libraries
or requires
keyword arguments, or is the main library (first positional argument).Requires:
and Requires.private:
) it will be removed from the private list.shared_library()
and NOT library()
) add only -lfoo
into Libs:
or Libs.private:
but their dependencies are not pulled. This is because dependencies are only needed for static link.static_library()
or library()
) add -lfoo
into Libs:
or Libs.private:
and recursively add their dependencies into Libs.private:
or Requires.private:
.Requires:
or Requires.private:
. If a version was specified when declaring that dependency it will be written into the generated file too.dependency('threads')
) adds -pthread
into Libs:
or Libs.private:
.declare_dependency(compiler_args : '-DFOO', link_args : '-Wl,something', link_with : foo)
) add compiler_args
into Cflags:
if public, link_args
and link_with
into Libs:
if public or Libs.private:
if private.Cflags:
if public, and linker arguments into Libs:
if public or Libs.private:
if private.pkg.generate(mylib)
, any subsequent call to pkg.generate()
where mylib appears, will generate a Requires:
or Requires.private
instead of a Libs:
or Libs.private:
.By default, the files generated by pkg.generate
contain a hardcoded prefix path. In order to make them relocatable, a pkgconfig.relocatable
builtin option is provided. See Pkgconfig module options.