ubuntu eclipse 配置 gtk+2.0 庫
前言
IDE是我們不得不脭的東西,vi/vim/emacs + make + gcc/g++的方式固然很牛X,也很高效,但是它們無一不是配置復雜,需要極長年月才可以用的很好,達到替代所有IDE的程度。
所以我的選擇是:
使用eclipse寫代碼,gvim寫Makefile,在shell命令行中編譯,運行。
gtk安裝:
可參考如下網址:http://www.cnblogs.com/niocai/archive/2011/07/15/2107472.html
為了以防萬一,我把這篇文章抄了下來
一、安裝
1、安裝gcc/g++/gdb/make 等基本編程工具
sudo apt-get install build-essential
2、安裝 libgtk2.0-dev libglib2.0-dev 等開發相關的庫文件
sudo apt-get install gnome-core-devel
3、用于在編譯GTK程序時自動找出頭文件及庫文件位置
sudo apt-get install pkg-config
4、安裝 devhelp GTK文檔查看程序
sudo apt-get install devhelp
5、安裝 gtk/glib 的API參考手冊及其它幫助文檔
sudo apt-get install libglib2.0-doc libgtk2.0-doc
6、安裝基于GTK的界面GTK是開發Gnome窗口的c/c++語言圖形庫
sudo apt-get install glade libglade2-dev
或者:
#或者 sudo apt-get install glade-gnome glade-common glade-doc
7、安裝gtk2.0 或者 將gtk+2.0所需的所有文件統通下載安裝完畢
sudo apt-get install libgtk2.0-dev或者
sudo apt-get install libgtk2.0*
二、查看GTK庫版本
1、查看1.2.x版本
pkg-config --modversion gtk+
2、查看 2.x 版本
pkg-config --modversion gtk+-2.0
3、查看pkg-config的版本
pkg-config --version
4、查看是否安裝了gtk
pkg-config --list-all grep gtk
三、測試程序
//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;
}
四、編譯運行
1、編譯
gcc -o Helloworld Helloworld.c `pkg-config --cflags --libs gtk+-2.0`
2、運行
./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編譯運行程序的方式。也建議大家使用這種方式
來自:http://my.oschina.net/iamhere/blog/347960