Windows 下第一個 GTK 程式
|
|
以下說明安裝的步驟:
- 在 http://www.mingw.org/ 下載 MingGW
- 在GTK官網中取得 all-in-one bundle
- 安裝 MinGW,選擇安裝base tools、g++ 及 make
- 解開all-in-one bundle
- 在環境變數PATH中加入MinGW的bin路徑與解開後的GTK之bin路徑
這樣就完成Windows下撰寫GTK所需的安裝了,您可以執行以下的指令取得include目錄資訊並儲存至inc.txt:
| $ pkg-config --cflags --libs gtk+-2.0 > inc.txt |
執行以下的指令取得lib目錄資訊並儲存至lib.txt:
| $ pkg-config --libs --libs gtk+-2.0 > lib.txt |
為了方便起見,可撰寫一個簡單的Makefile如下,並將方才的inc.txt與lib.txt之內容分別設定給CFLAGS與LIBS:
- Makefile
CC = gcc
CFLAGS = -mms-bitfields -IC:/Winware/Gtk/include/gtk-2.0
-IC:/Winware/Gtk/lib/gtk-2.0/include -IC:/Winware/Gtk/include/atk-1.0
-IC:/Winware/Gtk/include/cairo -IC:/Winware/Gtk/include/pango-1.0
-IC:/Winware/Gtk/include/glib-2.0 -IC:/Winware/Gtk/lib/glib-2.0/include
-IC:/Winware/Gtk/include/libpng12
LIBS = -LC:/Winware/Gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0
-lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo
-lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl
main:
$(CC) foo.c -o foo.exe $(CFLAGS) $(LIBS)
然後您可以撰寫一個簡單的GTK程式:
- foo.c
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "哈囉!GTK+!");
gtk_widget_show(window);
gtk_main();
return 0;
}
為了可以顯示中文,您的檔案必須以UTF-8存檔(檔首無BOM),接著執行make指令:
| $ make gcc foo.c -o foo.exe -mms-bitfields -IC:/Winware/Gtk/include/gtk-2.0 -IC:/Winwar e/Gtk/lib/gtk-2.0/include -IC:/Winware/Gtk/include/atk-1.0 -IC:/Winware/Gtk/incl ude/cairo -IC:/Winware/Gtk/include/pango-1.0 -IC:/Winware/Gtk/include/glib-2.0 - IC:/Winware/Gtk/lib/glib-2.0/include -IC:/Winware/Gtk/include/libpng12 -LC:/Winw are/Gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowi n32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl |
程式將產生foo.exe,執行後的結果如下所示:

我的gtk編譯稍為出了一點錯,我不知錯在哪裡,可替我解答疑惑嗎?Orz
我在windows安裝了gcc和gtk,並且把gtk目錄改名放在c:\mingw\gtk+2.0
環境變數path→ c:\mingw\bin; c\mingw\gtk+2.0\bin
檔案名稱 FirstGTK.c
用cmd輸入 gcc FirstGTK.c -o FirstGTK pkg-config --cflags
由...發表 shooter on 八月 16, 2008 at 07:29 下午 CST #
我的gtk編譯稍為出了一點錯,我不知錯在哪裡,可替我解答疑惑嗎?Orz
我在windows安裝了gcc和gtk,並且把gtk目錄改名放在c:\mingw\gtk+2.0
環境變數path→ c:\mingw\bin; c:\mingw\gtk+2.0\bin
檔案名稱 FirstGTK.c
用cmd輸入 gcc FirstGTK.c -o FirstGTK pkg-config --cflags --libs gtk+-2.0
由...發表 shooter on 八月 16, 2008 at 07:32 下午 CST #
Windows 不會先解析pkg-config,用Makefile吧!
由...發表 良葛格 on 八月 17, 2008 at 07:16 上午 CST #
Hi :
我依照你的步驟, 實作我的第一個GTK (foo.exe), 但在使用make.exe作編譯時出現下面在makefile第 7 行 有error
以下是DOS下的操作:
--------------------------------------------
C:\MinGW\test_001>make
makefile:7: *** multiple target patterns. Stop.
--------------------------------------------
Note:
1) 我的Make.exe 是由C:\MinGW\bin\mingw32-make.exe 所更名而來的
2) 以下是我的makefile的部份內容, (第一字 為行數, 以方便閱讀, 實際檔案上是沒有的)
6 main:
7 $(CC) foo.c -o foo.exe $(CFLAGS) $(LIBS)
想請教 良葛格, 請問要如何修改才能順利編譯成功ㄋ??
由...發表 DEva on 九月 12, 2008 at 11:55 上午 CST #
那個Makefile為了排版方便,用了一些Makefile不允許的空白與斷行囉!實際上要:
CC = gcc
CFLAGS = -mms-bitfields -IC:/Winware/Gtk/include/gtk-2.0 -IC:/Winware/Gtk/lib/gtk-2.0/include -IC:/Winware/Gtk/include/atk
-1.0 -IC:/Winware/Gtk/include/cairo -IC:/Winware/Gtk/include/pango-1.0 -IC:/Winware/Gtk/include/glib-2.0 -
IC:/Winware/Gtk/lib/glib-2.0/include -IC:/Winware/Gtk/include/libpng12
LIBS = -LC:/Winware/Gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -
lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl
main:
$(CC) foo.c -o foo.exe $(CFLAGS) $(LIBS)
由...發表 良葛格 on 九月 12, 2008 at 12:29 下午 CST #
不排版的話又看不出來。。唔。。總之你要先知道Makefile怎麼寫,先去Google一下吧!CFLAGS跟LIBS等號後面的設定是不換行的,而main下的寫法要用TAB。。
由...發表 良葛格 on 九月 12, 2008 at 12:31 下午 CST #
為什麼windows下執行編好的程式會有cmd.exe跑出來?
要怎麼避免?
由...發表 kcqp5ovx on 十一月 22, 2008 at 05:09 下午 CST #
compile的時候多給餵 gcc 一個參數 -mwindows 就不會跑出 cmd.exe 囉
由...發表 rightson on 十二月 31, 2008 at 10:18 上午 CST #