ubuntu eclipse 配置 gtk+2.0 庫

前言

IDE是咱們不得不脭的東西,vi/vim/emacs + make + gcc/g++的方式當然很牛X,也很高效,可是它們無一不是配置複雜,須要極終年月才能夠用的很好,達到替代全部IDE的程度。 html

因此個人選擇是: linux

使用eclipse寫代碼,gvim寫Makefile,在shell命令行中編譯,運行。 c++


gtk安裝:

可參考以下網址:http://www.cnblogs.com/niocai/archive/2011/07/15/2107472.html shell

爲了以防萬一,我把這篇文章抄了下來 編程

1、安裝

一、安裝gcc/g++/gdb/make 等基本編程工具 ubuntu

sudo apt-get install build-essential


二、安裝 libgtk2.0-dev libglib2.0-dev 等開發相關的庫文件 vim

sudo apt-get install gnome-core-devel


三、用於在編譯GTK程序時自動找出頭文件及庫文件位置  windows

sudo apt-get install pkg-config


四、安裝 devhelp GTK文檔查看程序 app

sudo apt-get install devhelp

五、安裝 gtk/glib 的API參考手冊及其它幫助文檔 eclipse

sudo apt-get install libglib2.0-doc libgtk2.0-doc


六、安裝基於GTK的界面GTK是開發Gnome窗口的c/c++語言圖形庫

sudo apt-get install glade libglade2-dev

或者:

#或者
sudo apt-get install glade-gnome glade-common glade-doc


七、安裝gtk2.0 或者 將gtk+2.0所需的全部文件統通下載安裝完畢

sudo apt-get install libgtk2.0-dev
或者
sudo apt-get install libgtk2.0*



2、查看GTK庫版本

一、查看1.2.x版本

pkg-config --modversion gtk+


二、查看 2.x 版本

pkg-config --modversion gtk+-2.0


三、查看pkg-config的版本

pkg-config --version


四、查看是否安裝了gtk

pkg-config --list-all grep gtk


3、測試程序

//Helloworld.c

#include <gtk/gtk.h>

int main(int argc,char *argv[])
{
    GtkWidget    *window;
    GtkWidget    *label;
    
    gtk_init(&argc,&argv);
    
    /* create the main, top level, window */
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    
    /* give it the title */
    gtk_window_set_title(GTK_WINDOW(window),"Hello World");
    
    /* connect the destroy signal of the window to gtk_main_quit
     * when the window is about to be destroyed we get a notification and
     * stop the main GTK+ loop
     */
    g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);
    
    /* create the "Hello, World" label */
    label = gtk_label_new("Hello, World");
    
    /* and insert it into the main window */
    gtk_container_add(GTK_CONTAINER(window),label);
    
    /* make sure that everything, window and label, are visible */
    gtk_widget_show_all(window);
    
    /* start the main loop, and let it rest until the application is closed */
    gtk_main();
    
    return 0;
}





4、編譯運行

一、編譯

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


二、運行

./Helloworld



在eclipse中配置gtk+

網上的教程通常到這裏也就完事了,可是這是遠遠不行的,正像我開頭說的,咱們不可能一直用記事本開發,因此仍是要在eclipse之類的IDE中作開發的。關於IDE的選擇我就很少說了,只是我的習慣而已。

在eclipse中配置gtk以前,我固然也去查找了不少資料,最後發現一個比較靠普的:http://www.2cto.com/kf/201207/142182.html

可是這個是在windows下配置的,雖然差異不大,我在ubuntu中也按照文中所給的方法測試成功了,可是有個問題,我不只僅須要一個gtk+庫,我還須要libxml2庫,可能之後還須要libzip之類的第三方庫。因此不能一直在IDE中運行。比較客觀的一個緣由是:eclipse的console輸入很蛋疼,用shell + make 的方式也要比單純依賴IDE要靈活的多,最後一個緣由就是個人eclipse老是時不時的崩潰。。。。

仍是爲了以隮萬一,我作了部分摘抄:

一 4查看gtk+2.0的頭文件目標和庫文件名稱


laolang@laolang:~/study/gtk/pkg$ pkg-config --cflags gtk+-2.0 # 查看gtk+頭文件目標
-pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz  
laolang@laolang:~/study/gtk/pkg$ pkg-config --libs gtk+-2.0 # 查看gtk+庫文件名稱
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype  
laolang@laolang:~/study/gtk/pkg$
因爲咱們要常用,因此能夠用重定向把這些東西輸出到一個文件:


下面是我把格式改了一下以後的後果[其實就是對齊了而已]


laolang@laolang:~/study/gtk/pkg$ cat includes 
     1	-pthread 
     2	-I/usr/include/gtk-2.0 
     3	-I/usr/lib/x86_64-linux-gnu/gtk-2.0/include 
     4	-I/usr/include/atk-1.0 
     5	-I/usr/include/cairo 
     6	-I/usr/include/gdk-pixbuf-2.0 
     7	-I/usr/include/pango-1.0 
     8	-I/usr/include/gio-unix-2.0/ 
     9	-I/usr/include/freetype2 
    10	-I/usr/include/glib-2.0 
    11	-I/usr/lib/x86_64-linux-gnu/glib-2.0/include 
    12	-I/usr/include/pixman-1 
    13	-I/usr/include/libpng12 
    14	-I/usr/include/harfbuzz  
laolang@laolang:~/study/gtk/pkg$ cat libs 
     1	-lgtk-x11-2.0 
     2	-lgdk-x11-2.0 
     3	-latk-1.0 
     4	-lgio-2.0 
     5	-lpangoft2-1.0 
     6	-lpangocairo-1.0 
     7	-lgdk_pixbuf-2.0 
     8	-lcairo 
     9	-lpango-1.0 
    10	-lfontconfig 
    11	-lgobject-2.0 
    12	-lglib-2.0 
    13	-lfreetype  
laolang@laolang:~/study/gtk/pkg$


二 在eclipse中添加頭文件目錄和庫文件名稱


在eclipse中新建一個C工程,右鍵->propieties->C++ General->Paths and Symbols

選擇右側的GNU C,而後選擇 Includes,添加pkg-config --cflags gtk+-2.0的輸出。很遺憾,沒有一次性添加的方法,並且添加的時候不能帶上前面的-I,第一行的-pthread也不用添加


記得要選 Add to all configurations,一個個添加完以後,選擇Libraries,添加pkg-config --libs gtk+-2.0的輸出,固然也不要前面的-l,也要選擇 Add to all configuratins


三 設置編譯和鏈接選項

選擇C++ Build->setting,在右側的Configuration中選擇Debug

點選右側的 GCC C Compiler,在右側的 command中添加 `pkg-config --cflags --libs gtk+-2.0`,注意不是單綽號,而反引號

而後在Configuration中選擇Realease,一樣選擇GNU C Compiler,在右側的command中添加 `pkg-config --cfalgs --libs gtk+2.0`

點OK

 編譯運行

而後就是編譯運行了,在eclipse中編譯運行就很少說了,主要想說的是怎麼寫Makefile

在我所參考的網頁中,提供了一個通用makefile


GTK_FLAGS = $(shell pkg-config --cflags --libs gtk+-2.0)
all:
 gcc -Wall -std=c99 -o app *.c ${GTK_FLAGS}
可是這不是我想要的效果,真正的Makefile也不可能這麼寫,因而我在gtk的中文FAQ中找到了這樣一個Makefile



# basic GTK+ app makefile
SOURCES = myprg.c foo.c bar.c
OBJS    = ${SOURCES:.c=.o}
CFLAGS  = `gtk-config --cflags`
LDADD   = `gtk-config --libs`
CC      = gcc
PACKAGE = myprg

all : ${OBJS}
        ${CC} -o ${PACKAGE} ${OBJS} ${LDADD}

.c.o:
        ${CC} ${CFLAGS} -c $<

# end of file
這固然是可靠且可行的,個人Makefile也是基本上參考這一個Makefile寫的



# 功能:測試gtk+ Makefile
#
# 做者:小代碼
# 
# 時間:2014年 11月 23日 星期日 21:23:20 CST


PROGRAM=test


# 指定編譯器
CC=gcc
# 指定編譯選項
CFLAGS=-c -Wall `pkg-config --cflags gtk+-2.0`
# 指定鏈接時的庫
LDADD=`pkg-config --libs gtk+-2.0`

# 指定刪除命令及選項
RM=rm -rf

# 默認目標,建立可執行程序
all:${PROGRAM}


${PROGRAM}:helloGTK.o
	${CC} -o ${PROGRAM} $^ ${LDADD}

helloGTK.o:helloGTK.c



.PHNOY:clean run

# 清除工做
clean:
	-${RM} ${PROGRAM} *.o

# 運行程序
run:
	./${PROGRAM}
個人Makefile使用效果:



後記:

那麼咱們是否是每次都要這麼麻煩才能夠寫gtk程序呢?其實否則,只須要複製粘貼項目就能夠,固然你換了工做空間也可手導入項目

再就是爲何我不演示在eclipse中的運行效果?由於咱們不可能一直依賴IDE,eclipse對個人做用就是一個好用的代碼編輯器和項目管理工具,對我來講,它並非正值好的項目構建工具,因此我仍是喜歡使用eclipse寫代碼,make編譯運行程序的方式。也建議你們使用這種方式

相關文章
相關標籤/搜索