Search Google

Wednesday, April 23, 2008

wxWidgets + Bakefile 環境設定

+前幾天利用簡單的sample bakefile (.bkl)介紹如何開始開發自己的wxWidgets project,利用前幾天介紹的方法雖然可以很快的build出自己的wxWidgets GUI (.exe),但是總覺得missing something,例如:漂亮的button (詳請參照),桌面icon,或caption icon等。問題就出在我們少include了一些resource file (.rc),以下是wx-user mailing list上好心人士Vadim Zeitlin給我的建議:

One uses the manifest and hence has the native XP look, the other one does not. If you use a recent wx version, manifest should be automatically included provided you include wx/msw/wx.rc in your resource file. If you don't know about the resource files and such, looking at the minimal sample
make/project files should help.

於是我決定參考wxWidgets所附sample中的bakefile來打造屬於自己的獨立工作環境。
首先將[WX]\build\bakefiles,[WX]\include,與[WX]\lib這三個目錄複製到存放工作目錄的目錄中([WX]為wxWidgets的安裝目錄,例如:"C:\wxWidgets-2.8.7\"),如下圖:
圖中的kkbox為工作目錄

接下來將sample中minimal的bakefile (minimal.bkl)複製到我的工作目錄中並且改名為[your_bakefile].bkl,將裡面的exec id與sources替換成自己的設定,並將include files的路徑指到剛剛複製過來bakefile下的common_samples.bkl,把creatorid改成自己想設的字串,最後加上設定project resource file的部分[your_resource_file].rc,[your_bakefile].bkl看起來應該像下面所顯示的內容:









kkbox_buster.cpp
core
base
kkbox_buster.rc
kkfox_01




這時候如果我們直接執行bakefile -f mingw [your_bakefile].bkl便會看到一些錯誤訊息,因為bakefile目錄中wxwin.py裡面使用相對路徑include file,於是我們要將wxwin.py第100行的VERSION_FILE = '../../include/wx/version.h'改為VERSION_FILE = '../include/wx/version.h',接下來就可以執行bakefile -f mingw [your_bakefile].bkl取得makefile.gcc。
還不要高興得太早,這個makefile.gcc還沒有辦法用,因為library的路徑不對,於是我們需要將makefile.gcc中的LIBDIRNAME由原先的.\lib\gcc_$(LIBTYPE_SUFFIX)$(CFG)改為..\lib\gcc_$(LIBTYPE_SUFFIX)$(CFG),接下來將makefile.gcc存檔之後便可以進行build程序(mingw32-make -f makefile.gcc),如果程式碼沒有什麼問題的話稍待一會便可以得到wxWidgets的gui執行檔(.exe)。

以上為昨天晚上花一點時間研究的快速ugly hack!
至於乾淨的build from scrach。。。再看看吧@@

最後順帶一提resource file (.rc)的內容其實就是project會用到的一些icon圖示,wx.rc則是wxWidgets預設的一些效果(如漂亮的button效果等):

KKFOX ICON "KKBOX.exe_I0080_0404.ico"
#include "wx/msw/wx.rc"


Update @ 2008/04/28
而C++ src code裡面的寫法為在wxFrame的constructor中加入:
SetIcon(wxICON(KKFOX));

No comments: