星期五, 4月 20, 2007

簡介 pkg-config 的功能與用法

我們在開發 c 程式時常常會用到許多系統已安裝 library 所提供的 function,加速程式的開發。而我們必須針對所使用到的 function 進行 prototype 宣告,因此,我們必須在程式中將含有這些 library 所提供的 function 的 prototype 宣告的 header file 加到程式中,並且在編譯程式時加上額外的設定告訴編譯器該去系統中的何處找尋所要使用的 header file 以及所使用的 library file被安裝在何處。而這往往也是一開始讓程式設計者最頭痛的地方。還好,在 linux 系統上有一個非常好用的工具 pkg-config 可以讓我們查詢 library 的 header file 以及 library 本身所在位置,以及在編譯程式時該使用的編譯參數為何。

pkg-config 命令是可以用來讀取安裝在 linux 系統上的 library 相關資訊。這個程式主要讀取系統中位於 /usr/lib/pkgconfig 目錄或是環境變數 PKG_CONFIG_PATH 所設定的路徑中的負檔名為 .pc 的檔案,這些檔案包含系統安裝的 library 的相關資訊,包括:安裝的目錄、程式編譯的參數等等。

使用方法很簡單
  • pkg-config --cflags library-name-with-version 就可以得到編譯程式時,pre-processing 動作必須加上的參數設定。例如:我在自己的電腦上下pkg-config --cflags glib-2.0,其結果為-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include。
  • pkg-config --libs library-name-with-version就可以得到 linking 時所必須傳給編譯器的參數。執行 pkg-config --libs glib-2.0 得到-L/lib -lglib-2.0。
另外,我們還可以利用 pkg-config 來簡化 Makefile 的撰寫。在Makefile中,原來寫在編譯器之後的參數,改成 pkg-config --cflags --libs library-name-with-version 即可。例如:
將Makefile中的這一行
gcc -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -L/lib -lglib-2.0 program.c
替換成
gcc pkg-config --cflags --libs glib-2.0 program.c

2 則留言:

Unknown 提到...

你好 看到你這篇文章覺得很有參考價值所以取了小段內容include在我的文章http://www.wretch.cc/blog/Vic0906/7727924

如果有不妥的地方我會立即做修正
vic@glcuk.tw
感謝你的無私分享^^

Unknown 提到...

非常感謝分享