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_FOUNDTrue if a pkg-config executable was found.
PKG_CONFIG_VERSION_STRINGAdded in version 2.8.8.
The version of pkg-config that was found.
PKG_CONFIG_EXECUTABLEThe pathname of the pkg-config program.
PKG_CONFIG_ARGNAdded 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.
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.
Added in version 3.3: The CMAKE_PREFIX_PATH,
CMAKE_FRAMEWORK_PATH, and CMAKE_APPBUNDLE_PATH cache
and environment variables will be added to the pkg-config search path.
The NO_CMAKE_PATH and NO_CMAKE_ENVIRONMENT_PATH arguments
disable this behavior for the cache variables and environment variables
respectively.
The PKG_CONFIG_USE_CMAKE_PREFIX_PATH variable set to FALSE
disables this behavior globally.
Added in version 3.7: The IMPORTED_TARGET argument will create an imported target named
PkgConfig::<prefix> that can be passed directly as an argument to
target_link_libraries().
Added in version 3.13: The GLOBAL argument will make the
imported target available in global scope.
Added in version 3.15: Non-library linker options reported by pkg-config are stored in the
INTERFACE_LINK_OPTIONS target property.
Changed in version 3.18: Include directories specified with -isystem are stored in the
INTERFACE_INCLUDE_DIRECTORIES target property. Previous
versions of CMake left them in the INTERFACE_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
named foo 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
information pkg-config provides when called with the --static
option (<XXX> = <prefix>_STATIC).
<XXX>_FOUNDset to 1 if module(s) exist
<XXX>_LIBRARIESonly the libraries (without the '-l')
<XXX>_LINK_LIBRARIESthe libraries and their absolute paths
<XXX>_LIBRARY_DIRSthe paths of the libraries (without the '-L')
<XXX>_LDFLAGSall required linker flags
<XXX>_LDFLAGS_OTHERall other linker flags
<XXX>_INCLUDE_DIRSthe '-I' preprocessor flags (without the '-I')
<XXX>_CFLAGSall required cflags
<XXX>_CFLAGS_OTHERthe other compiler flags
All but <XXX>_FOUND may be a ;-list if the
associated variable returned from pkg-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>_VERSIONversion of the module
<YYY>_PREFIXprefix directory of the module
<YYY>_INCLUDEDIRinclude directory of the module
<YYY>_LIBDIRlib 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.
The FOO_glib-2.0_VERSION and FOO_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
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>...])
Added 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 run
pkg_get_variable().
Example:
pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)
Added in version 3.4.
Retrieves the value of a pkg-config variable varName and stores it in the
result variable resultVar in the calling scope.
pkg_get_variable(<resultVar> <moduleName> <varName>
[DEFINE_VARIABLES <key>=<value>...])
If pkg-config returns multiple values for the specified variable,
resultVar will contain a ;-list.
Options:
DEFINE_VARIABLES <key>=<value>...Added in version 3.28.
Specify key-value pairs to redefine variables affecting the variable
retrieved with pkg-config.
For example:
pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
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.
Added in version 3.1: The PKG_CONFIG environment variable can be used as a hint if
PKG_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.
Added 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 initialize PKG_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.
Added in version 3.1.
Specifies whether pkg_check_modules() and
pkg_search_module() should add the paths in the
CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH and
CMAKE_APPBUNDLE_PATH cache and environment variables to the
pkg-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.