自己一直对linux很感兴趣,一直关注这ubuntu发展。从一开始使用的redhat9.0。又使用ubuntu8.04到ubuntu10.04一 路走过来,每次都是看到了欣喜。

 

这里是转了别人的东西,自己只是把它整理一下,分享给大家。分享快乐。呵呵。

 

注意:复制makefile时。注意命令前是TAB键。

 

 引用原文地址 http://blog.csdn.net/dai_weitao/archive/2007/08/22/1755111.aspx

 

1.Gtk 简介
    GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以可以用它来开发开源软件、自由软件,甚至是封闭源代码的商业软件,而不用花费任何费用来购买许可证和使用权。当前,GTK已经被成功地应用到 了大量的自由软件及商业软件中,已经取得了很大的成功。
    当前,GTK主要由几大组件构成:
*Gtk+:GTK的主要构件,包括所 有的图形控件及大量实用的API。
*Glib:包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK 的可移植性,同时提供 libc 的对应函数的增强版本。
*Pango:该组件用来处理国际化文字输出。
   GTK是一个跨平台的GUI开发库, 它是用C语言以OO的方式(俗称面向对象C, 又称OO-C)开发的. 只要是有一定C语言和GUI开发基础, 用GTK是一件很简单的事.
2.安装与配置
   笔者的操作系统为ubuntu 8.04
sudo apt-get install build-essential       #这将安装gcc/g++/gdb/make 等基本编程工具
sudo apt-get install gnome-core-devel  #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件
sudo apt-get install pkg-config            #用于在编译GTK程序时自动找出头文件及库文件位置
sudo apt-get install devhelp                 #这将安装 devhelp GTK文档查看程序
sudo apt-get install libglib2.0-doc libgtk2.0-doc  #这将安装 gtk/glib 的API参考手册及其它帮助文档
sudo apt-get instal glade libglade2-dev #这将安装基于GTK的界面构造程序
运行如下命令检查安装:
pkg-config --cflags gtk+-2.0
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1
pkg-config --libs gtk+-2.0
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
3.实例

#include  < gtk / gtk.h >

int  main( int  argc,  char   * argv[])
{
    
/*  A window and a button  */
    GtkWidget 
* win,  * btn;

    
/*  Initialize GTK  */
    gtk_init(
& argc,  & argv);

    
/*  New a window and a button  */
    win 
=  gtk_window_new(GTK_WINDOW_TOPLEVEL);
    btn 
=  gtk_button_new_with_label( " Close yourself " );
    
    
/*  Add button to window container  */
    gtk_container_add(GTK_CONTAINER(win), btn);

    
/*  Connect "close" and button to quit op  */
    g_signal_connect(win, 
" destroy " , G_CALLBACK(gtk_main_quit), NULL);
    g_signal_connect(btn, 
" clicked " , G_CALLBACK(gtk_main_quit), NULL);

    
/*  Show all in the window  */
    gtk_widget_show_all(win);

    
/*  Main loop, wait for signals  */
    gtk_main();

    
return   0 ;
}

上面的程序为main.c, 它所完成的功能就是创建一个窗口(window), 在窗口中添加一个按钮(button), 点击这个button或者是窗口的关闭按钮, 就会实现窗口的关闭, 并使程序结束.
这几行代码很简单, 主要有几个关键:

  • GtkWidget: 创建一个窗口和一个按钮. GTK中的控件都要用GtkWidget类型创建.
  • gtk_init(): 对程序用命令行参数进行初始化.
  • gtk_xxx_new(): 新建xxx类型的控件
  • gtk_container_add(): 把控件添加到container容器中, 在这里是把按钮添加到窗口中.
  • g_signal_connect(): 把GTK控件对应的操作信号, 连接到CALLBACK函数上.
  • gtk_widget_show_all(): 显示窗口.
  • gtk_main(): 开始main loop, 等待信号触发事件.

4. 编译
我用一个 makefile来展示编译命令.

# Target, compiler and objects.
EXEC   
=  test
CC     
=  gcc
OBJ    
=  main.o

# Use 
for  compile.
CFLAGS 
=  `pkg - config  -- cflags gtk +- 2.0 `
# Use 
for  link.
CLIBS  
=  `pkg - config  -- libs gtk +- 2.0 `

$(EXEC): $(OBJ)
    $(CC) 
- o $@ $ ^  $(CLIBS)

main.o: main.c
    $(CC) 
- c $ <  $(CFLAGS)

clean:
    rm $(EXEC) 
* .o

这里于普通的makefile不同的地方是CFLAGS和CLIBS两个变量, 分别用于编译和链接.
用`......`引用pkg- config实现参数的flags.
在编译时只需要在终端下执行make命令, 就会在目录下生成test可执行文件.