本文的編譯環境為Linux RedHat 9.0 + gcc,在編譯以下視窗程式之前,必須确定你的系統已安裝了以下三大元件:
1:開發工具
2:X軟體開發
3:GNOME軟體開發
如果在安裝Linux RedHat 9.0的時候未選擇這三個軟體包進行安裝,則可以單擊紅帽圖示-系統設定-添加/删除應用程式,打開軟體包管理視窗,點選開發工具,X軟體開發,GNOME軟體開發這三項前的複選框進行安裝。
1: 将以下代碼儲存為gtkwin.c檔案,放在root管理者目錄下。
#include <gtk/gtk.h>
/*按鈕單擊回調函數*/
void Button_Click(GtkWidget * widget,gpointer * data)
{
/*在指令行上列印一行消息*/
g_print("button clicked and data = %s/n",(char *)data);
}
void Destroy(GtkWidget * widget,gpointer * data)
{
/*退出消息循環*/
gtk_main_quit();
}
/*程式入口函數*/
int main(int argc,char **argv)
{
GtkWidget * window;
GtkWidget * button;
/*初始化圖形顯示環境*/
gtk_init(&argc,&argv);
/*建立頂級視窗*/
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/*設定視窗關閉銷毀時的回調函數*/
g_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(Destroy),NULL);
/*設定視窗标題*/
gtk_window_set_title(GTK_WINDOW(window),"My First GTK+ Window");
/*設定視窗邊框寬度*/
gtk_container_border_width(GTK_CONTAINER(window),20);
/*建立按鈕*/
button = gtk_button_new_with_label("Hello World");
/*設定按鈕單擊時的回調函數*/
g_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(Button_Click),"Hello World!");
/*将按鈕添加到視窗中*/
gtk_container_add(GTK_CONTAINER(window),button);
/*顯示按鈕和視窗*/
gtk_widget_show(button);
gtk_widget_show(window);
/*進入消息循環*/
gtk_main();
return 0;
}
2:單擊紅帽圖示-系統工具-終端,打開指令行視窗。輸入以下指令。其中[[email protected] root]#為指令行提示符,不需要手工輸入。該提示符表示的是[目前使用者名@目前機器名 目前所在目錄]。注意,如果源檔案不在root目錄,則應先進入到該目錄下。
[[email protected] root]# gcc -o gtkwin gtkwin.c `pkg-config --libs --cflags gtk+-2.0`
[[email protected] root]# ./gtkwin
-o gtkwin選項表示編譯生成的程式檔案名為gtkwin,如果不指定該選項,則gcc編譯器預設為a.out。gtkwin.c指定要編譯的源檔案名,`pkg-config --libs --cflags gtk+-2.0`要注意的是前後的兩個"`"字元為鍵盤上數字鍵1旁邊的那個鍵的輸入,而不是";"鍵旁邊的那個單引号鍵的輸入。
./gtkwin運作編譯生成後的目前目錄下的gtkwin程式。
OK,到這裡一個Gtk+視窗程式就可以編譯成功了。
另一種編譯方法可以使用Makefile,輸入以下代碼儲存為Makefile檔案,同樣放到root管理者目錄下。
CC=gcc
program=gtkwin
#PATH += /usr/include/gtk2.0
LDLIBS=`pkg-config --libs gtk+-2.0`
CFLAGS= -Wall -g `pkg-config --cflags gtk+-2.0`
$(program):$(program).o
$(CC) $(LDLIBS) $(program).o -o $(program)
$(program).o:$(program).c
$(CC) $(CFLAGS) -c $(program).c
clran:
-rm -f $(program)
-rm -f *.o
再在終端裡輸入:
[[email protected] root]# make
[[email protected] root]# ./gtkwin
同樣可以成功編譯,并且友善得多。