---
name: "pkg-config"
section: "1"
platform: "linux"
package: "pkgconf"
version: "3.0.10-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "openbsd"]
url: "https://new.carta.tech/pkgconf"
---

# pkg-config(1)

a system for configuring build dependency information

Part of [pkgconf(1)](/pkgconf/1.md).

## NAME

**pkgconf** – a system for configuring build dependency information

## SYNOPSIS

**pkgconf** \[*options*\] *module* *...*

## DESCRIPTION

The **pkgconf** program retrieves configuration information related to the *module* arguments from [pc(5)](/pc/5.md) files installed on the system and prints parts of the retrieved information depending on the specified *options*. The most common use is printing the compiler and linker flags needed to build software that uses the libraries given by the *module* arguments.

When printing compiler and linker flags, **pkgconf** escapes shell metacharacters (such as quotes, whitespace, brackets, braces and glob characters) in each fragment with a backslash. The output is intended to be re-tokenised by the consumer using POSIX shell word-splitting rules, as build systems generally do; under those rules the protective backslashes are removed and the original values are recovered. Note that pasting the output directly into an unquoted command substitution, for example ‘cc $(pkgconf --libs foo)’, performs word-splitting and pathname expansion but does *not* remove the backslashes, so a value containing such characters may reach the toolchain with the escaping still present.

The [pc(5)](/pc/5.md) files are searched for along a path constructed from the **--with-path** option, the PKG\_CONFIG\_PATH and PKG\_CONFIG\_LIBDIR environment variables, and some compiled-in default directories. The *module* arguments correspond to the file names, but without the *.pc* filename extension.

Several of the *options* cause immediate exit. If multiple of these options are given, only the option with the highest priority takes effect and those with lower priority are silently ignored. These options are, ordered by descending priority:

1. No-module options: **--dump-personality**, **--about**, **--version**, **--help**, **--atleast-pkgconfig-version**, **--list-all**, and **--list-package-names**: These options cause all arguments to be ignored.

2. Argument-only options: **--atleast-version**, **--exact-version**, and **--max-version**: These options only inspect modules explicitly specified on the command line and do not look at dependencies.

3. Limited-output options: **--validate**, **--license**, **--license-file**, **--link-abi**, **--source**, **--uninstalled**, and **--env**: These options perform dependency resolution, but exit after printing the information requested by the highest-priority option, ignoring other output options that may have been specified.

Several other options require at least one *module* argument, produce output, do not cause early exit, can be combined with each other, but override and disable all **--cflags** and **--libs** options:

1. Single-module output options: **--path**, **--print-variables**: If any of these options is specified, only the first *module* argument is used, all other arguments are silently ignored, and no dependency resolution is attempted.

2. Depth-one output options: **--print-provides**, **--modversion**, **--print-requires**, **--print-requires-private**, and **--variable**: If any of these options is specified, only modules explicitly specified on the command line are inspected and no dependency resolution is attempted.

3. General output options: **--simulate**, **--digraph**, **--solution**, **--fragment-tree**, **--newlines**: These options do not limit dependency resolution.

The most important output options **--cflags** and **--libs** can be combined with each other, but are overridden and ignored if any of the options listed above are specified.

The complete list of *options* is as follows:

- **--about**

  Print the version number, the Copyright notice, and the license of the **pkgconf** program to standard output and exit. Most other options and all command line arguments are ignored.

- **--atleast-pkgconfig-version**=*version*

  Exit with error if the requested *version* number is greater than the version number of the **pkgconf** program, or with success otherwise. Most other options and all command line arguments are ignored.

- **--atleast-version**=*version*

  Check the *module* arguments in the given order. Exit with error as soon as a *module* does not exist, and exit with success as soon as the version number of a *module* is greater than or equal to the requested *version* number. Exit with error if the version number of each *module* is less than the requested *version* number.

- **--cflags**, **--cflags-only-I**, **--cflags-only-other**

  Print all compiler flags required to compile against the *module*, or only the include path (**-I**) flags, or only the compiler flags that are not include path flags, respectively. These options imply **--print-errors**.

- **--debug**

  Print some non-fatal warning messages to standard error output that would otherwise silently be ignored. This option also implies **--print-errors**. If **pkgconf** was compiled without defining the preprocessor macro PKGCONF\_LITE, this option also prints many debugging messages to standard error output.

- **--define-prefix**

  Attempts to determine the prefix variable to use for CFLAGS and LIBS entry relocations. This is mainly useful for platforms where framework SDKs are relocatable, such as Windows.

- **--define-variable**=*varname*=*value*

  Define *varname* as *value*. Variables are used in query output, and some modules' results may change based on the presence of a variable definition.

- **--digraph**

  Dump the dependency resolver's solution as a graphviz ‘dot’ file. This can be used with graphviz to visualize module interdependencies. This option is only available if the preprocessor macro PKGCONF\_LITE was not defined during compilation.

- **--dont-define-prefix**

  Disables the ‘define-prefix’ feature.

- **--dont-relocate-paths**

  Disables the path relocation feature.

- **--dump-personality**

  Print some default settings to standard output, in particular the default module search path that is used when PKG\_CONFIG\_LIBDIR is not defined, the default list of include paths that are filtered out when PKG\_CONFIG\_SYSTEM\_INCLUDE\_PATH is not defined, and the default list of library paths that are filtered out when PKG\_CONFIG\_SYSTEM\_LIBRARY\_PATH is not defined, and exit. Most other options and all command line arguments are ignored. This option is only available if the preprocessor macro PKGCONF\_LITE was not defined during compilation.

- **--env**=*varname*

  Print the requested values as variable declarations in a similar format as the [env(1)](/env/1.md) command.

- **--env-only**

  Initialize the module search path from **--with-path** and PKG\_CONFIG\_PATH only, ignoring PKG\_CONFIG\_LIBDIR and the compiled-in default directories.

- **--errors-to-stdout**

  Print all error, warning, and debugging messages to standard output instead of to standard error output.

- **--exact-version**=*version*

  Check the *module* arguments in the given order. Exit with error as soon as a *module* does not exist, and exit with success as soon as the version number of a *module* is exactly the requested *version* number. Exit with error if the version number of each *module* differs from the requested *version* number.

- **--exists**

  Exit with a non-zero exit status if the dependency resolver is unable to find all of the requested *module*s. This option is active by default and cannot be disabled. However, various other options cause **pkgconf** to exit and report success or failure before all arguments have been inspected.

- **--fragment-filter**=*types*

  Filter the fragment lists for the specified *types*.

- **--help**

  Print a usage summary on standard output and exit. Most other options and all command line arguments are ignored.

- **--ignore-conflicts**

  Ignore ‘Conflicts’ rules in modules. This option is implied by the options which merely report metadata about the requested modules rather than combining them into a build, namely **--license**, **--license-file**, **--modversion**, **--path**, **--print-provides**, **--print-requires**, **--print-requires-private**, **--print-variables**, **--source**, and **--variable**.

- **--keep-system-cflags**, **--keep-system-libs**

  Keep CFLAGS or linker flag fragments that would be filtered due to being included by default in the compiler.

- **--libs**, **--libs-only-L**, **--libs-only-l**, **--libs-only-other**

  Print all linker flags required to link against the *module*, or only the library path (**-L**) flags, or only the library (**-l**) flags, or only the linker flags that are neither library path nor library flags, respectively. These options imply **--print-errors**.

- **--link-abi**

  Print the set of link ABI tags (for example **c** or **c++**) that the *module* must be linked against, derived from the **Link.ABI** properties found across its dependency closure. The tags from a package's own **Link.ABI** property and those of its public **Requires** always apply, while **Requires.private** tags apply only when linking statically (**--static**). A module with no link ABI requirements prints **c**. See [pc(5)](/pc/5.md) for details of the **Link.ABI** property.

- **--list-all**

  Walk the module search path in the order of descending priority. For each [pc(5)](/pc/5.md) file found, print one line to standard output, containing the basename of the file without the extension, the **Name** property, a dash (‘-’), and the **Description** property. This option implies **--print-errors**. All command line arguments are ignored.

- **--list-package-names**

  Perform the same search as **--list-all**, but only print the basename of each [pc(5)](/pc/5.md) file without the extension, not the module name and the description. This option implies **--print-errors**. All command line arguments are ignored.

- **--log-file**=*file*

  Set the name of the output *file* where information about selected modules is logged, both about those selected by arguments and as dependencies. For each selected module, one line is printed, containing the basename of the [pc(5)](/pc/5.md) file without the extension, optionally an operator and version number describing the desired range of versions, and either the actual version number in square brackets or the string "NOT-FOUND". If this option is not provided, the name of the output file is instead taken from the PKG\_CONFIG\_LOG environment variable, and if that is not provided either, this kind of logging is disabled.

- **--max-version**=*version*

  Check the *module* arguments in the given order. Exit with error as soon as a *module* does not exist, and exit with success as soon as the version number of a *module* is less than or equal to the requested *version* number. Exit with error if the version number of each *module* is greater than the requested *version* number.

- **--maximum-traverse-depth**=*depth*

  Impose a limit on the allowed depth in the dependency graph. The default *depth* is 256. Set *depth* to -1 to allow unlimited traversal. For example, a *depth* of 2 restricts the resolver from acting on child dependencies of modules added to the resolver's solution. This option is overridden by the PKG\_CONFIG\_MAXIMUM\_TRAVERSE\_DEPTH environment variable and by the options **--modversion**, **--path**, **--print-provides**, **--print-requires**, **--print-requires-private**, **--print-variables**, and **--variable**.

- **--modversion**

  For each specified *module*, print the version number to standard output. If the **--verbose** option is also specified, the name of the respective *module* and a colon is printed before each version number. This option implies **--print-errors** and **--maximum-traverse-depth**=1 and overrides and disables all **--cflags** and **--libs** flags.

- **--msvc-syntax**

  Use MSVC syntax for **--cflags**, **--env**, and **--libs** output. This option is only available if the preprocessor macro PKGCONF\_LITE was not defined during compilation.

- **--newlines**

  Use newlines to separate individual CFLAGS or linker flag fragments instead of spaces.

- **--no-cache**

  Skip caching packages when they are loaded into the internal resolver. This may result in an alternate dependency graph being computed.

- **--no-provides**

  Ignore ‘Provides’ rules in modules when resolving dependencies.

- **--no-uninstalled**

  Forbids the dependency resolver from considering 'uninstalled' modules as part of a solution.

- **--path**

  For the first *module* given on the command line, let the dependency resolver find the [pc(5)](/pc/5.md) file describing that module, print the absolute pathname of that file to standard output, and exit immediately, ignoring most other options and all other arguments.

- **--prefix-variable**=*variable*

  Sets the ‘prefix’ variable used by the ‘define-prefix’ feature.

- **--print-errors**

  Print some messages about fatal errors to standard error output that would otherwise be omitted. This option is implied by many other options, but not by all. It can be overridden with **--silence-errors**.

- **--print-provides**

  For each specified *module*, print one line to standard output containing the **Name** property, an equal sign (‘=’), and the **Version** property. If the *module* contains one or more **Provides** properties, print additional lines in dependency list format, one name per line, each name optionally followed by an operator and a version. This option implies **--maximum-traverse-depth**=1 and overrides and disables all **--cflags** and **--libs** flags.

- **--print-requires**, **--print-requires-private**

  For each specified *module*, print the **Requires** or **Requires.private** properties, respectively, in dependency list format to standard output. Both of these options imply **--maximum-traverse-depth**=1 and override and disable all **--cflags** and **--libs** flags.

- **--print-variables**

  For the first *module* given on the command line, print the names of all seen variables to standard output, one per line. Any subsequent arguments are silently ignored. This option implies **--print-errors** and **--maximum-traverse-depth**=1 and overrides and disables all **--cflags** and **--libs** flags.

- **--pure**

  Treats the computed dependency graph as if it were pure. This is mainly intended for use with the **--static** flag and has no effect if **--shared** is also specified.

- **--shared**

  Compute a simple dependency graph that is only suitable for shared linking. This option overrides **--static**.

- **--short-errors**

  When printing error messages about modules that are not found or conflict with each other, avoid printing additional, verbose instructions explaining potential methods for solving the problem.

- **--silence-errors**

  Do not print any error, warning, or debugging messages at all. Overrides all of **--debug**, **--errors-to-stdout**, and **--print-errors**. This option is overridden and disabled if the PKG\_CONFIG\_DEBUG\_SPEW environment variable is set.

- **--simulate**

  Simulates resolving a dependency graph based on the requested modules on the command line. Dumps a series of trees denoting pkgconf's resolver state. This option is only available if the preprocessor macro PKGCONF\_LITE was not defined during compilation.

- **--solution**

  Print the names of the modules requested with *module* arguments and their dependencies to standard output. This option is only available if the preprocessor macro PKGCONF\_LITE was not defined during compilation.

- **--static**

  Compute a deeper dependency graph and use compiler/linker flags intended for static linking. This option is overridden by **--shared**.

- **--uninstalled**

  Exit with a non-zero result if the dependency resolver uses an ‘uninstalled’ module as part of its solution.

- **--validate** *package* *...*

  Validate specific ‘.pc’ files for correctness. This option implies **--print-errors** and **--errors-to-stdout**.

- **--variable**=*varname*

  For each specified *module*, print the value of the variable with the name *varname* to standard output in command-line order. This option implies **--maximum-traverse-depth**=1 and overrides and disables all **--cflags** and **--libs** flags.

- **--verbose**

  This option only has an effect if **--modversion** is also specified. It prints the name of the respective *module* and a colon before each version number.

- **--version**

  Print the version number of the **pkgconf** program to standard output and exit. Most other options and all command line arguments are ignored.

- **--with-path**=*path*

  Prepend the directory *path* to the module search path, giving it priority over all other directories including those from PKG\_CONFIG\_PATH and PKG\_CONFIG\_LIBDIR.

## ENVIRONMENT

- CPATH

  First supplementary colon-separated list of include paths filtered out in the same way as PKG\_CONFIG\_SYSTEM\_INCLUDE\_PATH.

- CPLUS\_INCLUDE\_PATH

  Third supplementary colon-separated list of include paths filtered out in the same way as PKG\_CONFIG\_SYSTEM\_INCLUDE\_PATH.

- C\_INCLUDE\_PATH

  Second supplementary colon-separated list of include paths filtered out in the same way as PKG\_CONFIG\_SYSTEM\_INCLUDE\_PATH.

- DESTDIR

  If set to the same value as PKG\_CONFIG\_SYSROOT\_DIR, follow PKG\_CONFIG\_FDO\_SYSROOT\_RULES for variable lookups, but disable automatic sysroot injection into **-I** and **-L** fragments to avoid prefixing paths with DESTDIR twice. If PKG\_CONFIG\_SYSROOT\_DIR is not set or set to a different value, DESTDIR is ignored.

- LIBRARY\_PATH

  Supplementary colon-separated list of library paths filtered out in the same way as PKG\_CONFIG\_SYSTEM\_LIBRARY\_PATH.

- OBJC\_INCLUDE\_PATH

  Fourth supplementary colon-separated list of include paths filtered out in the same way as PKG\_CONFIG\_SYSTEM\_INCLUDE\_PATH.

- PKG\_CONFIG\_ALLOW\_SYSTEM\_CFLAGS

  If set, this variable has the same effect as the **--keep-system-cflags** option.

- PKG\_CONFIG\_ALLOW\_SYSTEM\_LIBS

  If set, this variable has the same effect as the **--keep-system-libs** option.

- PKG\_CONFIG\_DEBUG\_SPEW

  If set, override and disable the **--silence-errors** option.

- PKG\_CONFIG\_DISABLE\_UNINSTALLED

  If set, enables the same behaviour as the **--no-uninstalled** flag.

- PKG\_CONFIG\_DONT\_DEFINE\_PREFIX

  If set, this variable has the same effect as the **--dont-define-prefix** option.

- PKG\_CONFIG\_DONT\_RELOCATE\_PATHS

  If set, disables the path relocation feature.

- PKG\_CONFIG\_FDO\_SYSROOT\_RULES

  If set, follow the sysroot prefixing rules that freedesktop.org pkg-config uses.

- PKG\_CONFIG\_IGNORE\_CONFLICTS

  If set, ignore **Conflicts** rules in modules. Has the same effect as the **--ignore-conflicts** option.

- PKG\_CONFIG\_LIBDIR

  A colon-separated list of low-priority directories where [pc(5)](/pc/5.md) files are looked up. The module search path is constructed by appending this list to PKG\_CONFIG\_PATH, which enjoys higher priority. If PKG\_CONFIG\_LIBDIR is not defined, the default list compiled into the **pkgconf** program from the PKG\_DEFAULT\_PATH preprocessor macro is appended instead. If PKG\_CONFIG\_LIBDIR is defined but empty, nothing is appended.

- PKG\_CONFIG\_LOG

  If set, log information about selected modules to the file with the name stored in this variable. For more details, see the **--log-file** command line option, which overrides this variable.

- PKG\_CONFIG\_MAXIMUM\_TRAVERSE\_DEPTH

  Impose a limit on the allowed depth in the dependency graph. Set this variable to -1 to allow unlimited traversal. This variable overrides the **--maximum-traverse-depth** option, but is overridden by the other options mentioned there.

- PKG\_CONFIG\_MSVC\_SYNTAX

  If set, use MSVC syntax for **--cflags**, **--env**, and **--libs** output. This variable has the same effect as the **--msvc-syntax** option. If the preprocessor macro PKGCONF\_LITE was defined during compilation, this variable is ignored.

- PKG\_CONFIG\_PATH

  A colon-separated list of high-priority directories where [pc(5)](/pc/5.md) files are looked up. The module search path is constructed by prepending the directory specified with **--with-path**, if any, and unless **--env-only** is specified, by appending either PKG\_CONFIG\_LIBDIR or the compiled-in default directories with lower priority.

- PKG\_CONFIG\_PRELOADED\_FILES

  Colon-separated list of [pc(5)](/pc/5.md) files which are loaded before any other pkg-config files. These packages are given highest priority over any other [pc(5)](/pc/5.md) files that would otherwise provide a given package.

- PKG\_CONFIG\_PURE\_DEPGRAPH

  If set, enables the same behaviour as the **--pure** flag.

- PKG\_CONFIG\_RELOCATE\_PATHS

  If set, this variable has the same effect as the **--define-prefix** option.

- PKG\_CONFIG\_SYSROOT\_DIR

  If set, this variable defines a ‘sysroot’ directory, which will be prepended to every path variable beginning with the prefix variable in a given [pc(5)](/pc/5.md) file. Useful for cross compilation. The value of this environment variable is also copied into the global variable *pc\_sysrootdir*.

- PKG\_CONFIG\_SYSTEM\_INCLUDE\_PATH

  Colon-separated list of include paths that are filtered out and not printed by the **--cflags** and **--cflags-only-I** options because they are considered system include paths. If not defined, the default list compiled into the **pkgconf** program from the SYSTEM\_INCLUDEDIR preprocessor macro is used instead. Any directories listed in the environment variables CPATH, C\_INCLUDE\_PATH, CPLUS\_INCLUDE\_PATH, and OBJC\_INCLUDE\_PATH are also filtered out.

- PKG\_CONFIG\_SYSTEM\_LIBRARY\_PATH

  Colon-separated list of library paths that are filtered out and not printed by the **--libs** and **--libs-only-L** options because they are considered system library paths. If not defined, the default list compiled into the **pkgconf** program from the SYSTEM\_LIBDIR preprocessor macro is used instead.

- PKG\_CONFIG\_TOP\_BUILD\_DIR

  The value of the *pc\_top\_builddir* global variable. If this environment variable is not defined, the string "$(top\_builddir)" is used as the value of *pc\_top\_builddir*.

## EXIT STATUS

The **pkgconf** utility exits 0 on success, and \>0 if an error occurs.

## EXAMPLES

Displaying the CFLAGS of a package:

```
$ pkgconf --cflags foo
```

```
-fPIC -I/usr/include/foo
```

## SEE ALSO

[pc(5)](/pc/5.md), [pkg.m4(7)](/pkg.m4/7.md)
