pkg-config的用法
阿新 • • 發佈:2018-12-31
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
================================================================
檢視一個.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}
[
/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
[
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