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

时间:2015-03-11 21:22:18

标签: centos automake pkg-config

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

目前,它只假设${PREFIX}/lib/pkgconfig为我的.pc文件的目的地,但在CentOS 7上,${PREFIX}的默认值为/usr/local,但{{1}默认情况下,只会查看pkgconfig/usr/share/pkgconfig。因此,/usr/lib64/pkgconfig无法找到lib2 lib1,并且配置脚本会崩溃。

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

1 个答案:

答案 0 :(得分:0)

来自man pkg-config

  

PKG_INSTALLDIR(目录)

     

将变量pkgconfigdir替换为模块应安装pkg-config .pc文件的位置。默认情况下   目录是$ libdir / pkgconfig,但可以通过传递DIRECTORY来更改默认值。用户可以通过覆盖    --with-pkgconfigdir参数。

这允许您将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_INSTALLDIRpkgconfigdir扩展为/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
$