Search Google

Thursday, June 08, 2006

在win32環境中建立wxWidgets的開發環境,使用wxWidgets-2.6.3

話說前幾天在準備為ESDC比賽寫個GUI介面的時後剛好前任EOS教父ratbert也問我在win32下都用什麼寫GUI,當下回了ratbert -- "wxWidgets"。
wxWidgets的前身叫做wxWindows,但是因為跟MS有版權上得爭議,所以改名為wxWidgets,其他的介紹就請各位自行上wxWidgets的官網瞭解。

會想要寫這篇wiki的主要原因說穿了只是自己資質駑鈍,照著網頁上說的設定下去設定之後還是無法compile sample code。
所以在花兩天把設定搞定之後決定上來寫個wiki作為備份,免得哪天重裝電腦的時候又要再花兩天在設定環境上面~~
廢話就說到這裡,讓我開始把替設定的步驟做詳盡的紀錄吧!

以下的紀錄分為兩大部份,第一部份在環境與工具方面有較多著墨,第二部份才會談到設定wxWidgets套件的步驟。

[第一部份:環境與工具]
在win32環境中我選擇使用下列組合搭配wxWidgets開發GUI介面:
1. MinGW + MSYS
2. Vim

Vim可以使用.exe檔安裝,如果想要在console下使用vim的話請在系統路徑中加入vim.exe的路徑,而MinGW + MSYS的部份我則安裝了下列套件:
gcc-core-3.4.2-20040916-1.tar.gz
gcc-g++-3.4.2-20040916-1.tar.gz
bison-2.0-MSYS.tar.gz
msysDTK-1.0.1.exe
MSYS-1.0.10.exe
mingw-runtime-3.9.tar.gz
mingw-utils-0.3.tar.gz
w32api-3.6.tar.gz
binutils-2.15.91-20040904-1.tar.gz
gdb-5.2.1-1.exe
mingw32-make-3.80.0-3.exe
wget-1.9.1-mingwPORT.tar.bz2 <-- 這個並不需要,自己裝開心的!

[第二部份:設定wxWidgets套件]
下載wxMSW-2.6.3-Setupt-1.exe, 安裝的時候預設會將檔案安裝到"C:\wxWidgets-2.6.3",這時候參照"C:\wxWidgets-2.6.3\doc\msw\ install.txt"中使用MinGW編譯的章節(使用configure的部份)來編譯wxWidgets。編譯完畢之後會多一個"C:\ wxWidgets-2.6.3\build-debug"的目錄,這個目錄將會是接下來一切設定的根基。這時候繼續照著"install.txt"的步 驟確認wxWidgets是否安裝成功。
接下來就是設定Makefile的部分,仔細閱讀sample的Makefile之後做了些修改,如果只是想要寫簡單程式的話直接將下面Makefile 內容複製到工作路徑之後將"OUTFILE"改成想要的檔名即可成功編譯出GUI介面執行檔。需要注意的是原始檔名必須是main.cpp(也可以自行修 改Makefile),還有就是因為我使用的是static link的版本,因此編譯出來的執行檔相當的大,如果需要進階一點的版本則可以重新compile一個dynamic link的wxWidget。
修改過的Makefile是長這樣子的:

Makefile [頭]

prefix = .
exec_prefix = $(prefix)
INSTALL = /bin/install -c
OUTFILE = parseOuts
EXEEXT = .exe
WINDRES = windres
REZ =
SETFILE =
NM = nm
srcdir = .
top_srcdir = .
top_builddir = c:/wxWidgets-2.6.3/build-debug/
LDFLAGS_GUI = -mwindows
CXX = g++
CXXFLAGS = -ggdb -O0 -mthreads -Wall -Wundef -Wno-ctor-dtor-privacy
CPPFLAGS = -DWX_PRECOMP -DNO_GCC_PRAGMA -D__WXDEBUG__ -I$(top_builddir)lib/wx/include/msw-ansi-debug-static-2.6 -I$(top_builddir)../include -I$(top_srcdir)/include
LDFLAGS = -mthreads
WX_LIB_FLAVOUR =
TOOLKIT = MSW
TOOLKIT_LOWERCASE = msw
TOOLKIT_VERSION =
TOOLCHAIN_FULLNAME = msw-ansi-debug-static-2.6
EXTRALIBS = -mthreads -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32
WX_RELEASE = 2.6
WX_VERSION = $(WX_RELEASE).3
LIBDIRNAME = $(top_builddir)lib
FNL_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) -I$(srcdir) $(__DLLFLAG_p) $(CPPFLAGS) $(CXXFLAGS)
FNL_OBJECTS = main.o
CXXC = $(top_builddir)./bk-deps $(CXX)
PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION)
WXBASEPORT =
WXDEBUGFLAG = d
EXTRALIBS_FOR_BASE = $(EXTRALIBS)
EXTRALIBS_FOR_GUI = $(EXTRALIBS_GUI)
__RCDEFDIR_p = -i $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME)
__RCDEFDIR_p_1 = --include-dir $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME)
__WXLIB_CORE_p = -lwx_mswd_core-2.6
__WXLIB_BASE_p = -lwx_based-2.6
__LIB_TIFF_p = -lwxtiff$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
__LIB_JPEG_p = -lwxjpeg$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
__LIB_PNG_p = -lwxpng$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
__LIB_ZLIB_p = -lwxzlib$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
__LIB_REGEX_p = -lwxregexd-2.6
__LIB_EXPAT_p = -lwxexpatd-2.6

all: $(OUTFILE)$(EXEEXT)

clean:
rm -rf ./*.o
rm -rf $(OUTFILE)$(EXEEXT)

$(OUTFILE)$(EXEEXT): $(FNL_OBJECTS)
$(CXX) -o $@ $(FNL_OBJECTS) $(LDFLAGS) -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(__LIB_ZLIB_p) $(__LIB_ODBC_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) $(EXTRALIBS_FOR_GUI) $(SAMPLES_RPATH_POSTLINK)

$(FNL_OBJECTS): $(srcdir)/main.cpp
$(CXXC) -c -o $@ $(FNL_CXXFLAGS) $(srcdir)/main.cpp

.PHONY: all clean

Makefile [尾]

No comments: