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
- Added 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
- Added 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 - 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.- Added in version 3.3: The - CMAKE_PREFIX_PATH,- CMAKE_FRAMEWORK_PATH, and- CMAKE_APPBUNDLE_PATHcache and environment variables will be added to the- pkg-configsearch path. The- NO_CMAKE_PATHand- NO_CMAKE_ENVIRONMENT_PATHarguments disable this behavior for the cache variables and environment variables respectively. The- PKG_CONFIG_USE_CMAKE_PREFIX_PATHvariable set to- FALSEdisables this behavior globally.- Added in version 3.7: The - IMPORTED_TARGETargument 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 - GLOBALargument will make the imported target available in global scope.- Added in version 3.15: Non-library linker options reported by - pkg-configare stored in the- INTERFACE_LINK_OPTIONStarget property.- Changed in version 3.18: Include directories specified with - -isystemare stored in the- INTERFACE_INCLUDE_DIRECTORIEStarget property. Previous versions of CMake left them in the- INTERFACE_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 named- foowith 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 information- pkg-configprovides when called with the- --staticoption (- <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>_FOUNDmay be a ;-list if the associated variable returned from- pkg-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>_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_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. The- FOO_glib-2.0_VERSIONand- FOO_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>...]) - Added 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 run- pkg_get_variable().- Example: - pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2) 
- pkg_get_variable¶
- Added in version 3.4. - Retrieves the value of a pkg-config variable - varNameand stores it in the result variable- resultVarin the calling scope.- pkg_get_variable(<resultVar> <moduleName> <varName> [DEFINE_VARIABLES <key>=<value>...]) - If - pkg-configreturns multiple values for the specified variable,- resultVarwill 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) 
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.- Added in version 3.1: The - PKG_CONFIGenvironment variable can be used as a hint if- PKG_CONFIG_EXECUTABLEhas not yet been set.- Changed in version 3.22: If the - PKG_CONFIGenvironment variable is set, only the first argument is taken from it when using it as a hint.
- PKG_CONFIG_ARGN¶
- 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_CONFIGenvironment 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_ARGNis 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¶
- 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_PATHand- CMAKE_APPBUNDLE_PATHcache and environment variables to the- pkg-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.
