Bil*_*sky 7 automake centos pkg-config
我有几个使用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(目录)
将变量 pkgconfigdir 替换为模块应安装 pkg-config .pc 文件的位置。默认情况下,目录是 $libdir/pkgconfig,但可以通过传递 DIRECTORY 来更改默认值。用户可以通过
--with-pkgconfigdir参数覆盖。
这允许您向用户公开 pkg-config 文件的安装目录(并且 - 如果您的发行版修补了 pkg-config 以使用非标准搜索路径,它有望为您的系统选择正确的默认值)。
例子:
配置.ac:
[...]
PKG_INSTALLDIR
[...]
Run Code Online (Sandbox Code Playgroud)
生成文件.am:
[...]
pkgconfig_DATA = lib1.pc
[...]
Run Code Online (Sandbox Code Playgroud)
用法
$ ./configure --prefix=/usr --with-pkgconfigdir=/usr/lib64/pkgconfig
Run Code Online (Sandbox Code Playgroud)
请不要对在何处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
$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9439 次 |
| 最近记录: |