這片文章來自Arith Xu的博客 http://www.arithxu.com/
Twitter:https://twitter.com/ArithXu
最近因爲實驗室的一個項目需要使用GTK做UI,所以研究了很久GTk。這個軟件主要面向Linix平臺,但是我希望自己可以在隨身攜帶的Macbook Air 上開發,所以花了點時間研究瞭如何在Mac OS X下配置GTK開發環境。我這裏配置的是GTK+3.0,方法同樣也適用於GTK+2.0。
實驗平臺:Mac OS X 10.9.3
GTK版本:GTK+3.0
首先介紹下Homebrew,它是Mac OS X下一個新興的優秀的包管理工具。經常使用Linux或Unix系統的同學應該會比較喜歡包管理工具。如果你是一個Mac發燒友,那麼Homebrew你值得擁有。這裏留下Homebrew官網,有興趣可以去詳細瞭解。
1、首先準備安裝的條件(Command Line Tools和X11 Server)
安裝Command Line Tools :如果你已經安裝了,或者已經安裝過Xcode這裏可以選擇忽略。
xcode-select--install
安裝XQuartz:GTK需要X11 Server,如果你的Mac安裝的是Mac OS X Mountain Lion 或者更高的版本,那麼就需要手動安裝XQuartz。你可以選擇官網下載安裝(http://xquartz.macosforge.org/landing/),或者從Launchpad中點擊X11安裝。
2、安裝Homebrew
Homebrew官網(http://brew.sh),使用Rubby腳本安裝,因爲OS X已經自帶了Ruby,所以如果你沒有刪除或者升級過OS X自帶的Ruby,就可以直接用下面的命令安裝了。如果你升級或者刪除過Ruby,請按照Homebrew官網的要求安裝對應版本的Ruby。
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
安裝完成後測試Homebrew:查看Homebrew版本號,確認Homebrew正確安裝。
3、安裝pkg-config
pkg-config 是姨哥提供從源代碼中編譯軟件時查詢已安裝的庫時使用的統一接口工具。最早設計用於Linux,但現在在各個版本的BSD、Windows、Mac OS X 和 Solaris 上都有着可用的版本。(引用自維基百科)
因爲已經安裝好了 Homebrew ,所以這裏直接使用Homebrew安裝,有木有很方便。
brew install pkg-config
4、安裝GTK+3.0
同樣的方法,直接使用Homebrew安裝。
brew install gtk+3
5、配置pkg-config
vim~/.bash_profile
在文件的適當位置加入:
export PKG_CONFIG_PATH="/usr/X11/lib/pkgconfig:/usr/local/Cellar/cairo/1.12.16/lib/pkgconfig/"
保存退出後:
source~/.bash_profile
6、測試代碼
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
static gboolean delete_event(GtkWidget * widget, GdkEvent * event,
gpointer data) {
gtk_main_quit();
return FALSE;
}
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *label;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_title(GTK_WINDOW(window), "RobberPhex");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
g_signal_connect(window, "delete-event", G_CALLBACK(delete_event), NULL);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
label = gtk_label_new("Hello GTK!");
gtk_container_add(GTK_CONTAINER(window), label);
gtk_widget_show(label);
gtk_widget_show(window);
gtk_main();
return 0;
}
7、編譯代碼
我在使用gcc gtkhello.c -o gtktest pkg-config --cflags --libs gtk+-3.0
編譯的時候出現了錯誤,現在還沒找到錯誤的原因。不過多次常時候我使用這個命令的形式編譯通過併成功運行。
gcc $(pkg-config gtk+-3.0 --cflags) $(pkg-config gtk+-3.0 --libs) gtk_test.c -o gtktest