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 文件?