A pkg-config module for CMake.

Finds the pkg-config executable and add the pkg_check_modules() and pkg_search_module() commands.

In order to find the pkg-config executable, it uses the PKG_CONFIG_EXECUTABLE variable or the PKG_CONFIG environment variable first.


Retrieves the value of a variable from a package:

pkg_get_variable(<RESULT> <MODULE> <VARIABLE>)

If multiple values are returned variable will contain a ;-list.

For example:

pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)

Checks for all the given modules.

pkg_check_modules(<PREFIX> [REQUIRED] [QUIET]
                  <MODULE> [<MODULE>]*)

When the REQUIRED argument was set, macros will fail with an error when module(s) could not be found.

When the QUIET argument is set, no status messages will be printed.

By default, if CMAKE_MINIMUM_REQUIRED_VERSION is 3.1 or later, or if PKG_CONFIG_USE_CMAKE_PREFIX_PATH is set, the CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH, and CMAKE_APPBUNDLE_PATH cache and environment variables will be added to pkg-config search path. The NO_CMAKE_PATH and NO_CMAKE_ENVIRONMENT_PATH arguments disable this behavior for the cache variables and the environment variables, respectively. The IMPORTED_TARGET argument will create an imported target named PkgConfig::<PREFIX>> that can be passed directly as an argument to target_link_libraries().

It sets the following variables:

PKG_CONFIG_FOUND          ... if pkg-config executable was found
PKG_CONFIG_EXECUTABLE     ... pathname of the pkg-config program
PKG_CONFIG_VERSION_STRING ... the version of the pkg-config program found
                              (since CMake 2.8.8)

For the following variables two sets of values exist; first one is the common one and has the given PREFIX. The second set contains flags which are given out when pkg-config was called with the --static option.

<XPREFIX>_FOUND          ... set to 1 if module(s) exist
<XPREFIX>_LIBRARIES      ... only the libraries (w/o the '-l')
<XPREFIX>_LIBRARY_DIRS   ... the paths of the libraries (w/o the '-L')
<XPREFIX>_LDFLAGS        ... all required linker flags
<XPREFIX>_LDFLAGS_OTHER  ... all other linker flags
<XPREFIX>_INCLUDE_DIRS   ... the '-I' preprocessor flags (w/o the '-I')
<XPREFIX>_CFLAGS         ... all required cflags
<XPREFIX>_CFLAGS_OTHER   ... the other compiler flags
<XPREFIX> = <PREFIX>        for common case
<XPREFIX> = <PREFIX>_STATIC for static linking

Every variable containing multiple values will be a ;-list.

There are some special variables whose prefix depends on the count of given modules. When there is only one module, <PREFIX> stays unchanged. When there are multiple modules, the prefix will be changed to <PREFIX>_<MODNAME>:

<XPREFIX>_VERSION    ... version of the module
<XPREFIX>_PREFIX     ... prefix-directory of the module
<XPREFIX>_INCLUDEDIR ... include-dir of the module
<XPREFIX>_LIBDIR     ... lib-dir of the module
<XPREFIX> = <PREFIX>  when |MODULES| == 1, else

A <MODULE> parameter can have the following formats:

{MODNAME}            ... matches any version
{MODNAME}>={VERSION} ... at least version <VERSION> is required
{MODNAME}={VERSION}  ... exactly version <VERSION> is required
{MODNAME}<={VERSION} ... modules must not be newer than <VERSION>


pkg_check_modules (GLIB2   glib-2.0)
pkg_check_modules (GLIB2   glib-2.0>=2.10)

Requires at least version 2.10 of glib2 and defines e.g. GLIB2_VERSION=2.10.3

pkg_check_modules (FOO     glib-2.0>=2.10 gtk+-2.0)

Requires both glib2 and gtk2, and defines e.g. FOO_glib-2.0_VERSION=2.10.3 and FOO_gtk+-2.0_VERSION=2.8.20

pkg_check_modules (XRENDER REQUIRED xrender)

Defines for example:


Same as pkg_check_modules(), but instead it checks for given modules and uses the first working one.

pkg_search_module(<PREFIX> [REQUIRED] [QUIET]
                  <MODULE> [<MODULE>]*)


pkg_search_module (BAR     libxml-2.0 libxml2 libxml>=2)

Path to the pkg-config executable.


Whether pkg_check_modules() and pkg_search_module() should add the paths in CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH, and CMAKE_APPBUNDLE_PATH cache and environment variables to 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.