1. 程式人生 > >pkg-config的用法

pkg-config的用法

export PKG_CONFIG_PATH=/cv/lib:$PKG_CONFIG_PATH

================================================================
檢視一個.pc檔案的內容:
[[email protected] pkgconfig]# cat glib-2.0.pc
prefix=/usr
exec_prefix=/usr
libdir=/lib
includedir=/usr/include
configexecincludedir=/usr/lib/glib-2.0/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: GLib
Description: C Utility Library
Version: 2.12.3
Libs: -L${libdir} -lglib-2.0 
Cflags: -I${includedir}/glib-2.0 -I${configexecincludedir}

[
[email protected]
pkgconfig]# pwd
/usr/lib/pkgconfig

可見.pc檔案 是對其的庫檔案路徑,頭檔案路徑,版本號,Cflags等一些引數進行封裝。

再來看看第一個Gtk+程式裡的
`pkg-config   --cflags   --libs  gtk+-2.0`意思:
`pkg-config   --cflags   --libs  gtk+-2.0` 是pkg-config從路徑/usr/lib/pkgconfig
/gtk+-2.0.pc中提取出來的用於編譯用的。

[[email protected] pkgconfig]# cat  gtk+-2.0.pc
prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=/usr/include
target=x11

gtk_binary_version=2.10.0
gtk_host=i686-redhat-linux-gnu

Name: GTK+
Description: GIMP Tool Kit (${target} target)
Version: 2.10.4
Requires: gdk-${target}-2.0 atk cairo
Libs: -L${libdir} -lgtk-${target}-2.0

Cflags: -I${includedir}/gtk-2.0

顯然,出可以自己來指定為:-L/usr/lib  -lgtk-{target}-2.0  -I/usr/include/gtk-2.0

下面來看一下{target}該是多少:

[[email protected] lib]# ls gt
gthumb/        gtk-2.0/       gtkhtml/      
gtk/           gtk-sharp-2.0/ gtkmm-2.4/    

[[email protected] lib]# ls gtk-2.0/
2.10.0  2.4.0  immodules  include  modules

[
[email protected]
lib]# ls gtk-sharp-2.0/
gconfsharp-schemagen.exe

[[email protected] lib]# pwd
/usr/lib
所以認為-lgtk-{target}-2.0中的{target}該是空字元: 
-lgtk-{target}-2.0====>-lgtk--2.0

At Last So:(理論大致上:)
-L/usr/lib  -lgtk-{target}-2.0  -I/usr/include/gtk-2.0  ====>
-L/usr/lib  -lgtk--2.0  -I/usr/include/gtk-2.0
而實際上更多些:
對比pkg-config對gtk+-2.0看實際效果:
[[email protected] base]$ pkg-config  --cflags  --libs  gtk+-2.0
-I/usr/include/gtk-2.0  -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12  -L/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 
後面還有很多的路徑哦。

gtk_base.c:
#include <gtk/gtk.h>
int main(int argc,char *argv[])
{
    GtkWidget  *window;
    gtk_init(&argc,&argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);
    gtk_main();
    return FALSE;
}

gcc   -o     gtk_base      gtk_base.c    `pkg-config   --cflags   --libs  gtk+-2.0`

來源:http://www.cppblog.com/colorful/archive/2012/05/05/173750.html