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_FOUNDif pkg-config executable was found
PKG_CONFIG_EXECUTABLEpathname of the pkg-config program
PKG_CONFIG_VERSION_STRINGversion of pkg-config (since CMake 2.8.8)
- 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
REQUIREDargument is given, the command will fail with an error if module(s) could not be found.When the
QUIETargument is given, no status messages will be printed.New in version 3.1: The
CMAKE_PREFIX_PATH,CMAKE_FRAMEWORK_PATH, andCMAKE_APPBUNDLE_PATHcache and environment variables will be added to thepkg-configsearch path. TheNO_CMAKE_PATHandNO_CMAKE_ENVIRONMENT_PATHarguments disable this behavior for the cache variables and environment variables respectively. ThePKG_CONFIG_USE_CMAKE_PREFIX_PATHvariable set toFALSEdisables this behavior globally.New in version 3.6: The
IMPORTED_TARGETargument will create an imported target namedPkgConfig::<prefix>that can be passed directly as an argument totarget_link_libraries().New in version 3.13: The
GLOBALargument will make the imported target available in global scope.New in version 3.15: Non-library linker options reported by
pkg-configare stored in theINTERFACE_LINK_OPTIONStarget property.Changed in version 3.18: Include directories specified with
-isystemare stored in theINTERFACE_INCLUDE_DIRECTORIEStarget property. Previous versions of CMake left them in theINTERFACE_COMPILE_OPTIONSproperty.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 namedfoowith various constraints:foomatches any version.foo<2only matches versions before 2.foo>=3.1matches any version from 3.1 or later.foo=1.2.3requires 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-configprovides when called with the--staticoption (<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>_FOUNDmay be a ;-list if the associated variable returned frompkg-confighas multiple values.Changed in version 3.18: Include directories specified with
-isystemare stored in the<XXX>_INCLUDE_DIRSvariable. 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_VERSIONwill 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_VERSIONwill 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
FOObe considered found. TheFOO_glib-2.0_VERSIONandFOO_gtk+-2.0_VERSIONvariables 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_NAMEvariable 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
varNameand stores it in the result variableresultVarin the calling scope.pkg_get_variable(<resultVar> <moduleName> <varName>)
If
pkg-configreturns multiple values for the specified variable,resultVarwill contain a ;-list.For example:
pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
Variables Affecting Behavior¶
- PKG_CONFIG_EXECUTABLE¶
This can be set to the path of the pkg-config executable. If not provided, it will be set by the module as a result of calling
find_program()internally.New in version 3.1: The
PKG_CONFIGenvironment variable can be used as a hint.
- 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_PATHandCMAKE_APPBUNDLE_PATHcache and environment variables to thepkg-configsearch path.If this variable is not set, this behavior is enabled by default if
CMAKE_MINIMUM_REQUIRED_VERSIONis 3.1 or later, disabled otherwise.