pkg-config命令的Makefile.am
阿新 • • 發佈:2019-02-12
ret con sym dynamic fin info 為我 應用程序 efi
舉例:通過Makefile調用pkg-config命令。
pkg-config - Return metainformation about installed libraries
(為了使用lib庫,通過pkg-config生成必要的編譯options)
Makefile中的例:
CFLAGS = `pkg-config --cflags gtk+-2.0`
LDFLAGS = `pkg-config --libs-only-L gtk+-2.0`
LIBS = `pkg-config --libs-only-l gtk+-2.0`
其中的 ` 符號,不是單引號。而是和~符號為同一按鍵的那個符號!!!# ``
Makefile.am中的例:
AM_CFLAGS = `pkg-config --cflags gtk+-2.0`
AM_LDFLAGS = `pkg-config --libs gtk+-2.0`
已經登錄的lib庫的列表表示
$ pkg-config --list-all
這裏使用了程序 pkg-config,可以從 www.freedesktop.org 得到。這個程序讀取 GTK 附帶的 .pc 文件來決定編譯 GTK 程序需要的編譯選項
gtk+-2.0.pc文件的位置是
Cygwin的話 :/lib/pkgconfig/gtk+-2.0.pc Linux(ubuntu)的話:/usr/lib/pkgconfig/gtk+-2.0.pc
C是一種編譯語言, 需要使用gcc編譯器把源代碼轉換為二進制可執行代碼。
為了讓gcc知道GTK+鏈接庫位置以及編譯標識,我們使用pkg‐config。
當我們安裝GTK+開發包時, 一個叫"gtk+-2.0.pc"的配置文件也安裝了, 它告訴pkg‐config我們系統上安裝的GTK+庫版本以及包含文件位置等信息。
lb@ubuntu:~$ pkg-config --modversion gtk+-2.0
2.18.3
lb@ubuntu:~$
終端輸出將是你安裝的GTK+版本號。
現在來看編譯GTK+應用程序時需要的編譯器標識:
lb@ubuntu:~$ pkg-config --cflags gtk+-2.0
-D_REENTRANT -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/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
lb@ubuntu:~$
輸出將是一堆的 ‐I 開關選項指出編譯器使用的包含文件。
這能讓gcc知道到哪去找我們應用程序中"#include"所列出的包含文件。
每當使用了"#include"並引用了非標準C庫頭文件時, 都需要使用"I/path/to/library"選項傳
給gcc。這些庫可以裝在不同的地方,這根據分發要求,操作系統或使用者意願來定。
而pkg‐config為我們掌控這一切。
lb@ubuntu:~$ pkg-config --libs gtk+-2.0
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0
lb@ubuntu:~$
-l 連接庫文件。
補充:
pkg-config --cflags gmodule-2.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
lb@ubuntu:~$ pkg-config --libs gmodule-2.0
-Wl,--export-dynamic -lgmodule-2.0 -lglib-2.0
pkg-config命令的Makefile.am