# ECMGeneratePkgConfigFile

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
                          [INSTALL])

`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 “https://www.kde.org/”. 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.

Note

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 if you still set CMP0048 to OLD and don’t have CMake >= 4 the `ecm_setup_version()` macro)

Example usage:

    ecm_generate_pkgconfig_file(
        BASE_NAME KF5Archive
        DEPS Qt5Core
        FILENAME_VAR pkgconfig_filename
        INSTALL
    )

Since 1.3.0.