Generate a pkg-config file for the benefit of autotools-based projects.

ecm_generate_pkgconfig_file(BASE_NAME <baseName>
                      [LIB_NAME <libName>]
                      [DEPS [PRIVATE|PUBLIC] <dep> [[PRIVATE|PUBLIC] <dep> [...]]]
                      [FILENAME_VAR <filename_variable>]
                      [INCLUDE_INSTALL_DIR <dir>]
                      [LIB_INSTALL_DIR <dir>]
                      [DEFINES -D<variable=value>...]
                      [DESCRIPTION <library description>] # since 5.41.0
                      [URL <url>] # since 5.89.0

BASE_NAME is the name of the module. It’s the name projects will use to find the module.

LIB_NAME is the name of the library that is being exported. If undefined, it will default to the BASE_NAME. That means the LIB_NAME will be set as the name field as well as the library to link to.

DEPS is the list of libraries required by this library. Libraries that are not exposed to applications should be marked with PRIVATE. The default is PUBLIC, but note that according to the Guide to pkg-config marking dependencies as private is usually preferred. The PUBLIC and PRIVATE keywords are supported since 5.89.0.

FILENAME_VAR is specified with a variable name. This variable will receive the location of the generated file will be set, within the build directory. This way it can be used in case some processing is required. See also INSTALL.

INCLUDE_INSTALL_DIR specifies where the includes will be installed. If it’s not specified, it will default to INSTALL_INCLUDEDIR, CMAKE_INSTALL_INCLUDEDIR or just “include/” in case they are specified, with the BASE_NAME postfixed.

LIB_INSTALL_DIR specifies where the library is being installed. If it’s not specified, it will default to LIB_INSTALL_DIR, CMAKE_INSTALL_LIBDIR or just “lib/” in case they are specified.

DEFINES is a list of preprocessor defines that it is recommended users of the library pass to the compiler when using it.

DESCRIPTION describes what this library is. If it’s not specified, CMake will first try to get the description from the metainfo.yaml file or will create one based on LIB_NAME. Since 5.41.0.

URL An URL where people can get more information about and download the package. Defaults to “”. Since 5.89.0.

INSTALL will cause the module to be installed to the pkgconfig subdirectory of LIB_INSTALL_DIR, unless the ECM_PKGCONFIG_INSTALL_DIR cache variable is set to something different.


The first call to ecm_generate_pkgconfig_file() with the INSTALL argument will cause ECM_PKGCONFIG_INSTALL_DIR to be set to the cache, and will be used in any subsequent calls.

To properly use this macro a version needs to be set. To retrieve it, ECM_PKGCONFIG_INSTALL_DIR uses PROJECT_VERSION. To set it, use the project() command or the ecm_setup_version() macro

Example usage:

    BASE_NAME KF5Archive
    DEPS Qt5Core
    FILENAME_VAR pkgconfig_filename

Since 1.3.0.