我维护着几个使用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
找不到带有lib1
的pkg-config
,并且配置脚本崩溃。
因此,问题是,我的make install
中的lib1
如何正确检测要安装pkg-config
文件的目录?
最佳答案
来自man pkg-config
这使您可以向用户公开pkg-config文件的安装目录(并且-如果您的发行版修补了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
$
关于centos - 使用automake将pkg-config文件安装到CentOS上的正确路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28997618/