使用automake将pkg-config文件安装到CentOS上的正确路径

我有几个使用automake构建的项目(让我们称之为lib1和lib2). lib2依赖于lib1作为库,我在CentOS上遇到pkg-config默认值的问题.理想情况下,我希望用户不必设置任何环境变量来正确安装所有内容.

现在,它只是假设${PREFIX} / lib / pkgconfig作为我的.pc文件的目的地,但在CentOS 7上,${PREFIX}的默认值是/usr/local,但pkgconfig默认只查看/usr/share / pkgconfig和/usr/lib64 / pkgconfig.因此,lib2无法找到带有pkg-config的lib1,并且配置脚本会爆炸.

所以,问题是,我的lib1中的“make install”如何正确检测安装pkg-config文件的目录?

最佳答案
来自man pkg-config

PKG_INSTALLDIR(DIRECTORY)

Substitutes the variable pkgconfigdir as the location where a module should install pkg-config .pc files. By default the
directory is $libdir/pkgconfig, but the default can be changed by passing DIRECTORY. The user can override through the
--with-pkgconfigdir parameter.

这允许您将pkg-config文件的install-directory公开给用户(并且 – 如果您的发行版修补了pkg-config以使用非标准搜索路径,则希望为您的系统选择正确的默认值).

例:

configure.ac:

[...]
PKG_INSTALLDIR
[...]

Makefile.am:

[...]
pkgconfig_DATA = lib1.pc
[...]

用法

$./configure --prefix=/usr --with-pkgconfigdir=/usr/lib64/pkgconfig

注意

请不要对pkg-config查找文件的位置做出特定于发行版的假设.
始终使用默认值(出于正当理由它们是默认值),并提供一种方法来覆盖非标准系统的这些默认值.

那里有很多分布,只是因为在我的社区中有一个流行,这并不意味着其他社区(或不会改变)也是如此.

如果您的发行版不符合标准,那么它应该是一致的;如果它不能保持一致(例如pkg-config在/ foo / baz中查找文件,但PKG_INSTALLDIR将pkgconfigdir扩展到/usr/lib / pkg-config),那么您应该在您的发行版中报告错误.

另外我觉得相当奇怪,你的pkg-config不会搜索/usr/local中的文件.
例如.在我的Debian / sid系统上,它先搜索/usr/local然后搜索/ usr:

$which pkg-config
/usr/bin/pkg-config

$strace -e trace=open pkg-config --cflags foo 2>&1  | grep /usr
open("/usr/local/lib/x86_64-linux-gnu/pkgconfig", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/pkgconfig", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/share/pkgconfig", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/pkgconfig", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
open("/usr/lib/pkgconfig", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
open("/usr/share/pkgconfig", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
$

转载注明原文:使用automake将pkg-config文件安装到CentOS上的正确路径 - 代码日志