pkg-config:查找我的 .pc 文件安装位置的平台中立方式?

Posted

技术标签:

【中文标题】pkg-config:查找我的 .pc 文件安装位置的平台中立方式?【英文标题】:pkg-config: platform-neutral way to find out where to install my .pc file? 【发布时间】:2011-01-13 15:29:17 【问题描述】:

我怎么知道在哪里安装我的 .pc 文件?这些文件放在不同操作系统的不同位置。目标是能够在安装目标中使用$(INSTALL) mylib.pc $$(pkg-config --pcdir) 之类的东西。我以为pkg-config 能以某种方式告诉我,但找不到任何东西。

我正在寻找可在普通 Makefile 中使用的“独立”解决方案(必须不需要自动工具或类似工具的支持)。

【问题讨论】:

如果您安装 *.pc 文件,它必须安装在 $(DESTDIR)$(libdir)/pkgconfig 中。包的用户有权限和责任适当地设置 DESTDIR 和 libdir,如果你的包忽略了用户指定的内容,那么你的包就坏了。 【参考方案1】:

从 pkg-config 0.24 开始,您可以执行“pkg-config --variable=pc_path pkg-config”。

https://bugs.freedesktop.org/show_bug.cgi?id=14975

【讨论】:

【参考方案2】:

更新:显然现在有办法做到这一点:

pkg-config --variable pc_path pkg-config

在bug report 中找到(见评论 #4)。当前的手册页似乎记录了这一点。

原答案:

可怕的 hackish 解决方案(假设 bourne shell):

pkg-config --debug 2>&1 |grep Scanning | sed -e 's/Scanning directory //' -e "s/'//g"

这可能会为您提供多个位置。

编辑@just某人

更短的版本

pkg-config --debug 2>&1 | sed -ne '/Scanning directory /s///p'

并在第一个目录之后停止:

pkg-config --debug 2>&1 | sed -ne '/Scanning directory /s///p;q;'

【讨论】:

@just 某人:恭喜!非常好(但很老套,但我的解决方案也是如此:-P)使用调试消息的方法。 :-P - 使用 autoconf 进行便携式功能探测 -- 检查。 - 使用 automake 进行便携式建筑——检查。 - 使用 libtool 来抽象出共享库处理的特殊性——检查。 - 使用 pkg-config 可移植地发现编译器标志——检查。 - ... - 依靠可能存在或不存在的 pkg-config 的未记录实现细节,打败了整个可移植性的斗争——检查。 -1。仍在寻找一种便携且非疯狂的方式来做到这一点 @fstd 你应该检查当前的手册页——现在有办法做到这一点。【参考方案3】:

它应该进入$libdir/pkgconfig(即$prefix/lib/pkgconfig)

基本上,如果您安装库并将它们放在 $libdir 中,那么您的 .pc 文件应该在 $libdir/pkgconfig 中而不是其他任何地方。

【讨论】:

如果现实世界这么简单就好了,但无论出于何种原因,FreeBSD 将 pkgconfig 文件放在 $prefix/libdata/pkgconfig 中。这很愚蠢,但它就在那里。 在这种情况下,看看像 glib 这样的东西是做什么的 FreeBSD 肯定遵循这种模式。他们设置了 libdir=$prefix/libdata【参考方案4】:

不幸的是,对于普通的pkg-config 安装(对于版本 0.23),没有办法提取默认的“pc 路径”,除非在二进制文件上运行 strings(例如,strings /usr/bin/pkg-config | grep '/usr/.*/pkgconfig')。

如果您能够安装自定义构建,只需修补它以在使用适当的选项运行时写出 PKG_CONFIG_PC_PATH 的值。

另一个可能对您没有帮助的选项(但为了完整起见我还是会提到)是在调用 pkg-config 时设置 PKG_CONFIG_PATH 环境变量。

【讨论】:

“不可能”:这也是我的结论。不是一个我会过分满意的答案,但除非哈利波特出现,否则我会接受这个。

以上是关于pkg-config:查找我的 .pc 文件安装位置的平台中立方式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pkg-config 中使用 C++ Boost 库?

pkg-config 和 OSX 10.8,正确的 PKG_CONFIG_PATH?缺少 .pc 文件?

pkg-config找不到openssl.pc

pkg-config 找不到 .pc 文件,尽管它们在路径中

pkg-config的妙用

windows pkg-config libusb libusb.pc