Differences between revisions 9 and 10
Revision 9 as of 2018-10-31 06:55:56
Size: 2574
Editor: bonaccos
Comment: mark pkg-config as command
Revision 10 as of 2020-09-10 09:21:31
Size: 2000
Editor: bonaccos
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#rev 2018-10-30 stroth #rev 2020-09-10 bonaccos
Line 3: Line 3:
## page was renamed from PKGConfigVariable
Line 5: Line 5:
Line 6: Line 7:
When compiling software from source you might need to set variables such as '''$CFLAGS''' or '''$LDFLAGS'''. Here the `pkg-config` command comes handy. Nevertheless, `pkg-config` only works with libraries supporting `pkg-config`, meaning that there is a '''/pkgconfig''' sub-directory in the library dir with a corresponding '''*.pc''' file. If that is the case you can easily set these variables by typing (tcsh):
When compiling software from source you might need to set variables such as `CFLAGS` or `LDFLAGS`. Here the `pkg-config` command comes handy. Nevertheless, `pkg-config` only works with libraries supporting `pkg-config`, meaning that there is a '''/pkgconfig''' sub-directory in the library directory with a corresponding `*.pc` file. If that is the case you can easily set these variables by typing (bash):
Line 9: Line 11:
> setenv CFLAGS "`pkg-config --cflags PACKAGE-NAME`" export CFLAGS="`pkg-config --cflags PACKAGE-NAME`"
Line 14: Line 16:
> setenv LDLAGS "`pkg-config --libs PACKAGE-NAME`" export LDLAGS="`pkg-config --libs PACKAGE-NAME`"
Line 16: Line 18:
where '''PACKAGE-NAME''' is the package you need. However, by default `pkg-config` looks for '''*.pc''' files contained in '''/usr/lib/pkgconfig''' only. If you need `pkg-config` to search another path as well you may set the '''$PKG_CONFIG_PATH''' variable accordingly. This variable must contain paths leading to a directory containing '''*.pc''' files. Very often a package comes with a `pkg-config` directory containing the corresponding '''*.pc''' files. You may set multiple paths in the '''$PKG_CONFIG_PATH''' variable using ''':''' as separator. Here is an example setting two additional paths:
where '''PACKAGE-NAME''' is the package you need. However, by default `pkg-config` looks for '''*.pc''' files in system defined paths only. If you need `pkg-config` to search another path as well you may set the `PKG_CONFIG_PATH` variable accordingly. This variable contain paths leading to a directory containing `*.pc'` files. A package might come with a `pkg-config` directory containing the corresponding `*.pc` files. You may set multiple paths in the `PKG_CONFIG_PATH` variable using colon (`:`) as separator.

Here is an example setting two additional paths:
Line 19: Line 24:
> setenv PKG_CONFIG_PATH "path1-to-*.pc-files:path2-to-*.pc-files" export PKG_CONFIG_PATH="path1-to-*.pc-files:path2-to-*.pc-files"
Line 22: Line 27:
It is important to note that the '''--libs''' option sometimes only returns the link time directory, omitting the run time directory. Therefore, you might have to correct the '''LDFLAGS''' variable accordingly. It is important to note that the `--libs` option sometimes only returns the link time directory, omitting the run time directory. Therefore, you might have to correct the `LDFLAGS` variable accordingly.
Line 24: Line 29:
Remark: Paths contained in '''$PKG_CONFIG_PATH''' are preferred over the default path by `pkg-config`. This means if a corresponding '''*.pc''' file is found in the '''$PKG_CONFIG_PATH''' directories, a '''*.pc''' with the same name in '''/usr/lib/pkgconfig''' will not be considered. Remark: Paths contained in `PKG_CONFIG_PATH` are preferred over the default path by `pkg-config`. This means if a corresponding `*.pc` file is found in the `PKG_CONFIG_PATH` directories, a `*.pc` with the same name for instance in `/usr/lib/pkgconfig` will not be considered.
Line 26: Line 31:
Here is an example (again in tcsh): Here is an example:
Line 29: Line 34:
> setenv CFLAGS `"pkg-config --cflags gtk+-2.0"` export CFLAGS=`"pkg-config --cflags gtk+-2.0"`
Line 31: Line 36:
type '''man pkg-config''' for further information.
Line 33: Line 37:
== Typical PKG_CONFIG_PATH ==
'''*.pc''' files are typically placed in an directory named '''pkgconfig''' . Those directories are found below '''lib''' , inside sub-directories of '''lib''' and in '''share'''. As a typical '''$PKG_CONFIG_PATH''' you can use the followign command (bash) and prepend your own paths:
More details can be found in the [[https://manpages.debian.org/buster/pkgconf/pkg-config.1.en.html|pkg-config(1) manpage]].
Line 36: Line 39:
{{{
$ export PKG_CONFIG_PATH=' /usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig'
}}}

PKG-CONFIG

Using pkg-config to set variables

When compiling software from source you might need to set variables such as CFLAGS or LDFLAGS. Here the pkg-config command comes handy. Nevertheless, pkg-config only works with libraries supporting pkg-config, meaning that there is a /pkgconfig sub-directory in the library directory with a corresponding *.pc file. If that is the case you can easily set these variables by typing (bash):

export CFLAGS="`pkg-config --cflags PACKAGE-NAME`"

and

export LDLAGS="`pkg-config --libs PACKAGE-NAME`"

where PACKAGE-NAME is the package you need. However, by default pkg-config looks for *.pc files in system defined paths only. If you need pkg-config to search another path as well you may set the PKG_CONFIG_PATH variable accordingly. This variable contain paths leading to a directory containing *.pc' files. A package might come with a pkg-config directory containing the corresponding *.pc files. You may set multiple paths in the PKG_CONFIG_PATH variable using colon (:) as separator.

Here is an example setting two additional paths:

export PKG_CONFIG_PATH="path1-to-*.pc-files:path2-to-*.pc-files"

It is important to note that the --libs option sometimes only returns the link time directory, omitting the run time directory. Therefore, you might have to correct the LDFLAGS variable accordingly.

Remark: Paths contained in PKG_CONFIG_PATH are preferred over the default path by pkg-config. This means if a corresponding *.pc file is found in the PKG_CONFIG_PATH directories, a *.pc with the same name for instance in /usr/lib/pkgconfig will not be considered.

Here is an example:

export CFLAGS=`"pkg-config --cflags gtk+-2.0"`

More details can be found in the pkg-config(1) manpage.


CategoryLXSW

Workstations/Linux/Applications/PKGConfig (last edited 2020-09-10 09:22:14 by bonaccos)