pkg-config工具的使用

一、 pkg-config簡(jiǎn)介

1疫粥、關(guān)于pkg-config工具下面這篇博客有個(gè)簡(jiǎn)單的介紹,鏈接如下:

理解 pkg-config 工具

2地来、pkg-config軟件官網(wǎng):http://www.freedesktop.org/wiki/Software/pkg-config/

二的诵、最近在看glib、dbus匪补、gtk的一些例子程序伞辛,在編譯程序時(shí)經(jīng)常找不到頭文件和庫(kù)文件路徑烂翰。并且使用cmake進(jìn)行rpm打包和編譯時(shí)會(huì)使用到pkg-config這個(gè)實(shí)用的工具。

pkg-config能根據(jù)軟件安裝時(shí)軟件的.pc配置文件路徑找到相應(yīng)的頭文件路徑和庫(kù)文件路徑蚤氏,如我的ubuntu12.04下默認(rèn)安裝glib-2.0后在 /usr/lib/i386-linux-gnu/pkgconfig/

路徑下有g(shù)lib-2.0.pc,其內(nèi)容如下:

prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/i386-linux-gnu
includedir=${prefix}/include

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

Name: GLib
Description: C Utility Library
Version: 2.32.3
Requires.private: libpcre
Libs: -L${libdir} -lglib-2.0 
Libs.private: -pthread -lrt  -lpcre    
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include 
image.gif

根據(jù)glib-2.0.pc文件的描述我們可以看到使用sudo apt-get install glib-2.0后glib-2.0的各個(gè)文件存放路徑如下:

可執(zhí)行文件安裝路徑:/usr

.h頭文件安裝路徑為:/usr/include/glib-2.0和/usr/lib/i386-linux-gnu/glib-2.0/include

.so庫(kù)文件安裝路徑為:/usr/lib/i386-linux-gnu

三刽酱、在ubuntu12.04下安裝好glib-2.0和gtk+-2.0后,下面來(lái)看兩個(gè)例子瞧捌。

1、一個(gè)使用了glib庫(kù)的簡(jiǎn)單程序hello.c润文,代碼如下:

//hello.c
#include <glib.h>

int main(int argc, char *argv[])
{
    g_print("welcome to glib programming world!\n");

    return 0;
}
image.gif

打開(kāi)終端姐呐,輸入gcc -o hello hello.c pkg-config --cflags --libs glib-2.0(注意:此處不是單引號(hào),而是鍵盤(pán)左邊數(shù)字鍵'1'左側(cè)典蝌、Tab鍵上側(cè)的[`])曙砂,千萬(wàn)別弄錯(cuò)哦!)

ccf@ccf-F81Se:~/WorkPlace/Glib庫(kù)學(xué)習(xí)$ gcc -o hello hello.c `pkg-config --cflags --libs glib-2.0`
ccf@ccf-F81Se:~/WorkPlace/Glib庫(kù)學(xué)習(xí)$ ls
dbus-glib示例說(shuō)明.ppt  glib-2.34.3-docs    glib-notes.tar.gz    GLIB 庫(kù)簡(jiǎn)介  ~  GmainLoop.c~  loop      Thread_Pools_glib.pdf
Event_loop.html        glib-2.34.3.tar.xz  Glib庫(kù)的安裝和編譯?  gmain_demo.c~   hello         loop.c    理解pkg-config工具
glib-2.34.3            glib-notes          GLIB 庫(kù)簡(jiǎn)介          GmainLoop.c     hello.c       makefile  理解pkg-config工具~
ccf@ccf-F81Se:~/WorkPlace/Glib庫(kù)學(xué)習(xí)$ ./hello 
welcome to glib programming world!
ccf@ccf-F81Se:~/WorkPlace/Glib庫(kù)學(xué)習(xí)$ 

image.gif

2骏掀、一個(gè)簡(jiǎn)單的gtk程序

/*
*File name: gtkbase.c
*/

//#include <gtk-2.0/gtk/gtk.h>
#include <gtk/gtk.h>
//#include <gtk.h> //使用此路徑會(huì)編譯失敗鸠澈,找不到頭文件!

int main(int argc,char* argv[])
{
    GtkWidget *wnd;
    gtk_init(&argc,&argv);

    wnd=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(wnd);

    gtk_main();
    return 0;
}
image.gif

在終端編譯敲如命令:gcc gtkbase.c -o gtkbase pkg-config --cflags --libs gtk+-2.0 gthread-2.0

ccf@ccf-F81Se:~/WorkPlace/gtk$ ls
GTK2.0 編譯問(wèn)題    gtkbase.c   makefile    threadloop.c
GTK2.0 編譯問(wèn)題 ~  gtkbase.c~  threadloop
ccf@ccf-F81Se:~/WorkPlace/gtk$ gcc gtkbase.c -o gtkbase `pkg-config --cflags --libs gtk+-2.0 gthread-2.0`
ccf@ccf-F81Se:~/WorkPlace/gtk$ ./gtkbase 

[圖片上傳中...(image-2427e9-1603718060970-1)]

為了簡(jiǎn)單起見(jiàn)截驮,可以寫(xiě)一個(gè)簡(jiǎn)單的makefile文件笑陈,這樣的話(huà)每次編譯只需改動(dòng)很少的部分就行了,在終端鍵入make或make clean就OK了葵袭。

#makefile for gtkbase
APP_NAME=gtkbase
CC=gcc
RM=-rm -f
LIBS=`pkg-config --cflags --libs gtk+-2.0 gthread-2.0`

$(APP_NAME):$(APP_NAME).c
    gcc $< -o $@ $(LIBS)

.PHNOY:clean
clean:
    $(RM) *.o $(APP_NAME)
image.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涵妥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坡锡,更是在濱河造成了極大的恐慌蓬网,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹉勒,死亡現(xiàn)場(chǎng)離奇詭異帆锋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)禽额,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)锯厢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人绵疲,你說(shuō)我怎么就攤上這事哲鸳。” “怎么了盔憨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵徙菠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我郁岩,道長(zhǎng)婿奔,這世上最難降的妖魔是什么缺狠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮萍摊,結(jié)果婚禮上挤茄,老公的妹妹穿的比我還像新娘。我一直安慰自己冰木,他們只是感情好穷劈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著踊沸,像睡著了一般歇终。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逼龟,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天评凝,我揣著相機(jī)與錄音,去河邊找鬼腺律。 笑死奕短,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匀钧。 我是一名探鬼主播翎碑,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼之斯!你這毒婦竟也來(lái)了杈女?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吊圾,失蹤者是張志新(化名)和其女友劉穎达椰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體项乒,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啰劲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了檀何。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝇裤。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖频鉴,靈堂內(nèi)的尸體忽然破棺而出栓辜,到底是詐尸還是另有隱情,我是刑警寧澤垛孔,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布藕甩,位于F島的核電站,受9級(jí)特大地震影響周荐,放射性物質(zhì)發(fā)生泄漏狭莱。R本人自食惡果不足惜僵娃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腋妙。 院中可真熱鬧默怨,春花似錦、人聲如沸骤素。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)济竹。三九已至垃僚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間规辱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工栽燕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罕袋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓碍岔,卻偏偏與公主長(zhǎng)得像浴讯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔼啦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350