FindPkgConfig — CMake 3.29.5 Documentation

# 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 `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.1: 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.6: 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>_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 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>_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. 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

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_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)

pkg_get_variable

  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)

## 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_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.

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_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.

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_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.