【发布时间】:2012-04-30 13:07:12
【问题描述】:
各种开发人员不鼓励使用PKG_CHECK_MODULES(例如,this answer),但就我所寻找的原因而言,没有明确、全面的解释。所以,我问:
- 为什么
PKG_CHECK_MODULES会有害? - 有哪些替代方案?
我今天第一次使用它。我发现它非常有用,特别是对于处理非常复杂的库集,例如 GTK+,我拥有所有这些依赖项:
-I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0
-I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0
-I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/freetype2 -I/usr/include/libpng12
-lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0
-lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0
-lgthread-2.0 -lrt -lglib-2.0
【问题讨论】:
-
尽管 William Pursell 通常提出的
pkg-config替代方案背后的原因是合理的,但现实情况是,像 GTK 这样的整个平台都以“错误”的方式工作,修复它需要所有这些库以更改它们自己安装的目录。这将导致现有应用程序的构建系统的大量破坏。由于我认为“错误”的方式实际上不会造成任何伤害,因此不值得改变。 -
另外,
pkg-config允许您保持并行安装的不兼容版本的库(例如 GTK 2 和 GTK 3)。虽然我确信 William Pursell 已经考虑过这一点,并且很乐意解释如何按照他的方式去做 ;-) -
@ptomato 不,我严格来说是一个非 gui 人,从未直接与 gtk 打过交道。但我相信完全有可能做类似 "LDFLAGS=-L$( pkg-config --libs-only-L gtk+-2.0 ) CPPFLAGS=$( pkg-config --cflags gtk+-2.0 ) LIBS=$ ( pkg-config --libs-only-l gtk+-2.0 )",这些选项可以放在 config.site 中。需要明确的是,我对 pkg-config 没有异议,但我不喜欢 PKG_CHECK_MODULES,原因在我的回答中列出。
-
@至于安装不兼容版本的库...这就是 pkgsrc 的用途!
-
@elmarco pkgsrc 起源于 NetBSD,但适用于许多平台。
标签: autotools autoconf pkg-config