FindPkgConfig¶
A pkg-config
module for CMake.
Finds the pkg-config
executable and adds the pkg_get_variable()
,
pkg_check_modules()
and pkg_search_module()
commands. The
following variables will also be set:
PKG_CONFIG_FOUND
True if a pkg-config executable was found.
PKG_CONFIG_VERSION_STRING
New in version 2.8.8.
The version of pkg-config that was found.
PKG_CONFIG_EXECUTABLE
The pathname of the pkg-config program.
PKG_CONFIG_ARGN
New in version 3.22.
A list of arguments to pass to pkg-config.
Both PKG_CONFIG_EXECUTABLE
and PKG_CONFIG_ARGN
are initialized by the
module, but may be overridden by the user. See Variables Affecting Behavior
for how these variables are initialized.
-
pkg_check_modules
¶ Checks for all the given modules, setting a variety of result variables in the calling scope.
pkg_check_modules(<prefix> [REQUIRED] [QUIET] [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH] [IMPORTED_TARGET [GLOBAL]] <moduleSpec> [<moduleSpec>...])
When the
REQUIRED
argument is given, the command will fail with an error if module(s) could not be found.When the
QUIET
argument is given, no status messages will be printed.New in version 3.1: The
CMAKE_PREFIX_PATH
,CMAKE_FRAMEWORK_PATH
, andCMAKE_APPBUNDLE_PATH
cache and environment variables will be added to thepkg-config
search path. TheNO_CMAKE_PATH
andNO_CMAKE_ENVIRONMENT_PATH
arguments disable this behavior for the cache variables and environment variables respectively. ThePKG_CONFIG_USE_CMAKE_PREFIX_PATH
variable set toFALSE
disables this behavior globally.New in version 3.6: The
IMPORTED_TARGET
argument will create an imported target namedPkgConfig::<prefix>
that can be passed directly as an argument totarget_link_libraries()
.New in version 3.13: The
GLOBAL
argument will make the imported target available in global scope.New in version 3.15: Non-library linker options reported by
pkg-config
are stored in theINTERFACE_LINK_OPTIONS
target property.Changed in version 3.18: Include directories specified with
-isystem
are stored in theINTERFACE_INCLUDE_DIRECTORIES
target property. Previous versions of CMake left them in theINTERFACE_COMPILE_OPTIONS
property.Each
<moduleSpec>
can be either a bare module name or it can be a module name with a version constraint (operators=
,<
,>
,<=
and>=
are supported). The following are examples for a module namedfoo
with various constraints:foo
matches any version.foo<2
only matches versions before 2.foo>=3.1
matches any version from 3.1 or later.foo=1.2.3
requires that foo must be exactly version 1.2.3.
The following variables may be set upon return. Two sets of values exist: One for the common case (
<XXX> = <prefix>
) and another for the informationpkg-config
provides when called with the--static
option (<XXX> = <prefix>_STATIC
).<XXX>_FOUND
set to 1 if module(s) exist
<XXX>_LIBRARIES
only the libraries (without the '-l')
<XXX>_LINK_LIBRARIES
the libraries and their absolute paths
<XXX>_LIBRARY_DIRS
the paths of the libraries (without the '-L')
<XXX>_LDFLAGS
all required linker flags
<XXX>_LDFLAGS_OTHER
all other linker flags
<XXX>_INCLUDE_DIRS
the '-I' preprocessor flags (without the '-I')
<XXX>_CFLAGS
all required cflags
<XXX>_CFLAGS_OTHER
the other compiler flags
All but
<XXX>_FOUND
may be a ;-list if the associated variable returned frompkg-config
has multiple values.Changed in version 3.18: Include directories specified with
-isystem
are stored in the<XXX>_INCLUDE_DIRS
variable. Previous versions of CMake left them in<XXX>_CFLAGS_OTHER
.There are some special variables whose prefix depends on the number of
<moduleSpec>
given. When there is only one<moduleSpec>
,<YYY>
will simply be<prefix>
, but if two or more<moduleSpec>
items are given,<YYY>
will be<prefix>_<moduleName>
.<YYY>_VERSION
version of the module
<YYY>_PREFIX
prefix directory of the module
<YYY>_INCLUDEDIR
include directory of the module
<YYY>_LIBDIR
lib directory of the module
Changed in version 3.8: For any given
<prefix>
,pkg_check_modules()
can be called multiple times with different parameters. Previous versions of CMake cached and returned the first successful result.Changed in version 3.16: If a full path to the found library can't be determined, but it's still visible to the linker, pass it through as
-l<name>
. Previous versions of CMake failed in this case.Examples:
pkg_check_modules (GLIB2 glib-2.0)
Looks for any version of glib2. If found, the output variable
GLIB2_VERSION
will hold the actual version found.pkg_check_modules (GLIB2 glib-2.0>=2.10)
Looks for at least version 2.10 of glib2. If found, the output variable
GLIB2_VERSION
will hold the actual version found.pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0)
Looks for both glib2-2.0 (at least version 2.10) and any version of gtk2+-2.0. Only if both are found will
FOO
be considered found. TheFOO_glib-2.0_VERSION
andFOO_gtk+-2.0_VERSION
variables will be set to their respective found module versions.pkg_check_modules (XRENDER REQUIRED xrender)
Requires any version of
xrender
. Example output variables set by a successful call:XRENDER_LIBRARIES=Xrender;X11 XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp
-
pkg_search_module
¶ The behavior of this command is the same as
pkg_check_modules()
, except that rather than checking for all the specified modules, it searches for just the first successful match.pkg_search_module(<prefix> [REQUIRED] [QUIET] [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH] [IMPORTED_TARGET [GLOBAL]] <moduleSpec> [<moduleSpec>...])
New in version 3.16: If a module is found, the
<prefix>_MODULE_NAME
variable will contain the name of the matching module. This variable can be used if you need to runpkg_get_variable()
.Example:
pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)
-
pkg_get_variable
¶ New in version 3.4.
Retrieves the value of a pkg-config variable
varName
and stores it in the result variableresultVar
in the calling scope.pkg_get_variable(<resultVar> <moduleName> <varName>)
If
pkg-config
returns multiple values for the specified variable,resultVar
will contain a ;-list.For example:
pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
Variables Affecting Behavior¶
-
PKG_CONFIG_EXECUTABLE
¶ This cache variable can be set to the path of the pkg-config executable.
find_program()
is called internally by the module with this variable.New in version 3.1: The
PKG_CONFIG
environment variable can be used as a hint ifPKG_CONFIG_EXECUTABLE
has not yet been set.Changed in version 3.22: If the
PKG_CONFIG
environment variable is set, only the first argument is taken from it when using it as a hint.
-
PKG_CONFIG_ARGN
¶ New in version 3.22.
This cache variable can be set to a list of arguments to additionally pass to pkg-config if needed. If not provided, it will be initialized from the
PKG_CONFIG
environment variable, if set. The first argument in that environment variable is assumed to be the pkg-config program, while all remaining arguments after that are used to initializePKG_CONFIG_ARGN
. If no such environment variable is defined,PKG_CONFIG_ARGN
is initialized to an empty string. The module does not update the variable once it has been set in the cache.
-
PKG_CONFIG_USE_CMAKE_PREFIX_PATH
¶ New in version 3.1.
Specifies whether
pkg_check_modules()
andpkg_search_module()
should add the paths in theCMAKE_PREFIX_PATH
,CMAKE_FRAMEWORK_PATH
andCMAKE_APPBUNDLE_PATH
cache and environment variables to thepkg-config
search path.If this variable is not set, this behavior is enabled by default if
CMAKE_MINIMUM_REQUIRED_VERSION
is 3.1 or later, disabled otherwise.