不到二個禮拜要上班了。
為了融入公司的文化,我只好也來起個英文名字。
畢竟用以前的bbs id還是有點怪怪的。
最後選定 - Wesley,因為它前半部跟我的Wei有點像。
它的意思是西邊的草原,原本好像是一個叫John Wesley的人的surname,
但因為這個John好像創立了一個叫Methodism(衛理宗),
是英國地區宗教改革的一個重要人物,
所以後來就把它的surname拿來當作 given name。
對英文名字有興趣的可以參考下面的網站
http://www.babynames.com/
http://www.babynamesworld.com/
http://www.babynamer.com/
http://www.behindthename.com/
下面這篇文章也不錯
怎样取英文名
2008年2月15日 星期五
Embedded MySQL 初探
在我寫的一個出貨管理程式中,我用到了Embedded MySQL。
Embedded MySQL其實是一個DLL,它的名字是libmysqld.dll。
有了它,你的程式裡就等於內建了一個DBMS,
而不必實際去run一個database daemon並和它互動。
1. 設定C::B的Build options
首先,你必須先下載MySQL community server (Windows版本),
建議使用Without Installer來安裝(直接解壓縮就可以使用了,我最喜歡的方式)
在 MYSQL_DIR\Embedded\DLL下有release和debug兩種DLL可以使用,
檔名都是libmysqld.dll,把你需要的dll複製到你的project 裡可執行檔所在的資料夾。
接下來就是修改C::B的設定
1) Project -> Build options -> 右邊的樹狀圖中點選你的project名稱(不是點debug或release哦)
右邊選 [Search Directory] -> [compiler],並加入
$(#mysql)\include
註: $(#mysql) 是global variable,請設定為你的MYSQL_DIR
其設定方法可參考下面的文章 免安裝、輕量、跨平台的GUI開發環境
做了上述的動作後,當你在程式碼中加入 #include,compiler才有辦法找到它
接下來,你必須把libmysqld.dll 的import library加入linker的設定中
註: import library的說明可以參考MinGW 程式環境(一)
因為不同的編譯組態(release/debug)會使用不同的import library,
所以請對release及debug分別用下列的方式作設定:
a) [Search Directory] -> [linker] 加入import library所在的資料夾路徑
例如: $(#mysql)\Embedded\DLL\release
b) [Linker settings] -> 加入liblibmysqld.a
liblibmysqld.a就是libmysqld.dll的import library
但我們目錄中沒有這個檔案,所以我們必須想辦法產生,
我們可以發現release或debug目錄中有一個檔案叫 libmysqld.lib
這個是VC所使用的import library,我們必須想辦法把它轉成liblibmysqld.a。
詳細的說明請見
How can an MSVC program call a MinGW DLL, and vice versa?
簡單的說你必須下載 reimp這個工具
然後執行reimp libmysqld.lib
(注意: 它會用到MinGW/bin/dlltool,所以記得先把Path設好)
做好上述的動作,C::B的設定就完成了
2. 程式碼及my.ini的設定
-------------程式碼如下-----------------
#include
...
char *server_options[] = {/*unused */ "mysql_test" , "--defaults-file=.\\my.ini" };
// char *server_options[] = {/*unused */ "mysql_test" , "--defaults-file=e:\\my.ini" };
char *server_groups[] = {"libmysqld_server", "libmysqld_client", (char*) NULL};
const int num_opts = sizeof(server_options) / sizeof(char *);
/* server init */
if(mysql_server_init(num_opts, server_options, server_groups))
wxMessageBox(wxT("mysql_server_init fail\n"), wxT("fatal error"), wxOK);
/* client init */
MYSQL* mysql = mysql_init(NULL);
if(mysql == NULL)
wxMessageBox(wxT("mysql_init fail\n"), wxT("fatal error"), wxOK);
if(mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client"))
wxMessageBox(wxT("mysql_options1 fail\n"), wxT("fatal error"), wxOK);
if(mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL))
wxMessageBox(wxT("mysql_options2 fail\n"), wxT("fatal error"), wxOK);
if(mysql_real_connect(mysql, NULL, NULL, NULL, "saledb", 0, NULL,0) == NULL)
wxMessageBox(wxT("mysql_real_connect fail - %s\n"), wxT("fatal error"), wxOK);
------------------- END ----------------------------
------------- my.ini 設定如下 -----------------
[libmysqld_client]
default-character-set=utf8
[libmysqld_server]
basedir=./DB
datadir=./DB/data
default-character-set=utf8
-------------------- END ---------------------------
注意,在basedir下,一定要有data及share兩個資料夾,
直接從原本的mysql目錄複製過去即可。
Embedded MySQL其實是一個DLL,它的名字是libmysqld.dll。
有了它,你的程式裡就等於內建了一個DBMS,
而不必實際去run一個database daemon並和它互動。
1. 設定C::B的Build options
首先,你必須先下載MySQL community server (Windows版本),
建議使用Without Installer來安裝(直接解壓縮就可以使用了,我最喜歡的方式)
在 MYSQL_DIR\Embedded\DLL下有release和debug兩種DLL可以使用,
檔名都是libmysqld.dll,把你需要的dll複製到你的project 裡可執行檔所在的資料夾。
接下來就是修改C::B的設定
1) Project -> Build options -> 右邊的樹狀圖中點選你的project名稱(不是點debug或release哦)
右邊選 [Search Directory] -> [compiler],並加入
$(#mysql)\include
註: $(#mysql) 是global variable,請設定為你的MYSQL_DIR
其設定方法可參考下面的文章 免安裝、輕量、跨平台的GUI開發環境
做了上述的動作後,當你在程式碼中加入 #include
接下來,你必須把libmysqld.dll 的import library加入linker的設定中
註: import library的說明可以參考MinGW 程式環境(一)
因為不同的編譯組態(release/debug)會使用不同的import library,
所以請對release及debug分別用下列的方式作設定:
a) [Search Directory] -> [linker] 加入import library所在的資料夾路徑
例如: $(#mysql)\Embedded\DLL\release
b) [Linker settings] -> 加入liblibmysqld.a
liblibmysqld.a就是libmysqld.dll的import library
但我們目錄中沒有這個檔案,所以我們必須想辦法產生,
我們可以發現release或debug目錄中有一個檔案叫 libmysqld.lib
這個是VC所使用的import library,我們必須想辦法把它轉成liblibmysqld.a。
詳細的說明請見
How can an MSVC program call a MinGW DLL, and vice versa?
簡單的說你必須下載 reimp這個工具
然後執行reimp libmysqld.lib
(注意: 它會用到MinGW/bin/dlltool,所以記得先把Path設好)
做好上述的動作,C::B的設定就完成了
2. 程式碼及my.ini的設定
-------------程式碼如下-----------------
#include
...
char *server_options[] = {/*unused */ "mysql_test" , "--defaults-file=.\\my.ini" };
// char *server_options[] = {/*unused */ "mysql_test" , "--defaults-file=e:\\my.ini" };
char *server_groups[] = {"libmysqld_server", "libmysqld_client", (char*) NULL};
const int num_opts = sizeof(server_options) / sizeof(char *);
/* server init */
if(mysql_server_init(num_opts, server_options, server_groups))
wxMessageBox(wxT("mysql_server_init fail\n"), wxT("fatal error"), wxOK);
/* client init */
MYSQL* mysql = mysql_init(NULL);
if(mysql == NULL)
wxMessageBox(wxT("mysql_init fail\n"), wxT("fatal error"), wxOK);
if(mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client"))
wxMessageBox(wxT("mysql_options1 fail\n"), wxT("fatal error"), wxOK);
if(mysql_options(mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL))
wxMessageBox(wxT("mysql_options2 fail\n"), wxT("fatal error"), wxOK);
if(mysql_real_connect(mysql, NULL, NULL, NULL, "saledb", 0, NULL,0) == NULL)
wxMessageBox(wxT("mysql_real_connect fail - %s\n"), wxT("fatal error"), wxOK);
------------------- END ----------------------------
------------- my.ini 設定如下 -----------------
[libmysqld_client]
default-character-set=utf8
[libmysqld_server]
basedir=./DB
datadir=./DB/data
default-character-set=utf8
-------------------- END ---------------------------
注意,在basedir下,一定要有data及share兩個資料夾,
直接從原本的mysql目錄複製過去即可。
2008年2月14日 星期四
trace程式碼的好幫手: cscope+vim
小時候寫的程式都是用一個cpp檔就把全部程式碼塞進去的程式,
年紀大一點,接觸了一些大型的project之後,才逐漸發現世界不是一個cpp檔構成的。
但在混亂的標頭檔、cpp檔中想理出一番頭緒,
還真的要有一些工具的幫助,在些介紹cscope+vim的組合。
有用過unix-like系統的都知道,vim是一個強大又仁慈的編輯器。
cscope是一個將程式碼中的symbol建成database,以便於trace程式碼的工具。
兩者都是發源自unix系統的應用程式。
然而,我慣用的環境還是windows,所以今天就來研究一下如果在windows上使用它們。
1. 安裝gvim portable
下載gvim portable並解壓縮。(請到此下載 => Downloads )
portable,顧名思義,資料夾下的gvimportable.exe是可以直接執行的,
請把它改名為vi.exe,並把此資料夾加入Path環境變數中
(因為cscope在開啟檔案時會使用 vi)
2. 安裝cscope
a) 由於cscope的官網上並沒有可以直接執行的binary,
即使你想抓source回來compile也需要安裝cygwin
google "cscope mingw"一下後發現已經有人成功地做出binary了,
所以就直接下載cscope15.6-win32回來用吧!
解壓縮完後記得把資料夾的路徑加入Path。
b) 參考cscope官網的tutorial,下載cscope_maps.vim
將其放置於GVimPortable\App\vim\vim70\plugin 下
這個檔是定義一些key map,以便於在vim中快速地呼叫cscope
3. 使用方法
1) 單獨使用cscope
首先,請用開始->執行->cmd開出console
cscope的執行很簡單。但在執行之前要先定義一下TMPDIR這個環境變數
(因為windows下沒有 /tmp),把它設為你的暫存資料夾。
接著切換到程式碼的最上層目錄,
鍵入 cscope -R (-R代表會搜尋子目錄),它便會出現一個query的介面,
同時,它也會在目前的目錄下建立symbol的database (cscope.out)。
用上下左右鍵移動到 "Find this c symbol: "
鍵入你要搜尋的關鍵字即可。
搜尋結果會列出所有出現該關鍵字的檔案/行號,
你可以用上下鍵來選擇你想檢視的檔案/行號,按下Enter鍵後就會出現gvim的視窗。
(最好一次只開一個vim視窗)
若你需要再次搜尋不同的關鍵字,只需要按下tab,游標就會移到視窗的下半部。
按下?則會有使用說明;若要離開則按Ctrl+D。
2) 在vim中使用cscope
-自行鍵入關鍵字
在vim中可以用 :cs f s keyword 來搜尋 keyword
(cs -> cscope, f -> find, s -> symbol )
但此步驟前,vim會去讀取目前目錄下的cscope.out,若讀不到就會發生錯誤。
因此最好不要直接用vim去開啟某個.c檔,
而應該用上面 cscope -R -> Find this c symbol的方式來間接開啟vim,
這樣才不會因為你切換到子目錄下而找不到位於最上層的cscope.out。
-以游標所在的位置為symbol關鍵字
按下 Ctrl+'\' 後再按 s
-以游標所在的位置為function關鍵字 (搜尋這個function在那些地方被呼叫)
按下 Ctrl+'\' 後再按 c
-以游標所在的位置為file關鍵字 (搜尋檔案名稱中含有該關鍵字的檔案)
按下 Ctrl+'\' 後再按 f
此外,在某個symbol上按下Ctrl+ ']'
可以直接跳到該symbol的定義處;
若要返回則可以按 Ctrl+ 't' 。
(註: Ctrl+ 'o' 是返回上一個跳躍處)
要特別注意的是,cscope只認得 .c 檔
因此如果你的source是.cpp 或.java,
那你必須用以下的方式:
1) find . -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files
2) cscope -i cscope.files
至於windows的find.exe要去那裡生,就請大家自己想辦法囉。
另外,如果要確定自己的gvim版本是有支援可以在vim下鍵入 ":version"
來確定一下是不是有 "+cscope" 這一段文字。
年紀大一點,接觸了一些大型的project之後,才逐漸發現世界不是一個cpp檔構成的。
但在混亂的標頭檔、cpp檔中想理出一番頭緒,
還真的要有一些工具的幫助,在些介紹cscope+vim的組合。
有用過unix-like系統的都知道,vim是一個強大又仁慈的編輯器。
cscope是一個將程式碼中的symbol建成database,以便於trace程式碼的工具。
兩者都是發源自unix系統的應用程式。
然而,我慣用的環境還是windows,所以今天就來研究一下如果在windows上使用它們。
1. 安裝gvim portable
下載gvim portable並解壓縮。(請到此下載 => Downloads )
portable,顧名思義,資料夾下的gvimportable.exe是可以直接執行的,
請把它改名為vi.exe,並把此資料夾加入Path環境變數中
(因為cscope在開啟檔案時會使用 vi)
2. 安裝cscope
a) 由於cscope的官網上並沒有可以直接執行的binary,
即使你想抓source回來compile也需要安裝cygwin
google "cscope mingw"一下後發現已經有人成功地做出binary了,
所以就直接下載cscope15.6-win32回來用吧!
解壓縮完後記得把資料夾的路徑加入Path。
b) 參考cscope官網的tutorial,下載cscope_maps.vim
將其放置於GVimPortable\App\vim\vim70\plugin 下
這個檔是定義一些key map,以便於在vim中快速地呼叫cscope
3. 使用方法
1) 單獨使用cscope
首先,請用開始->執行->cmd開出console
cscope的執行很簡單。但在執行之前要先定義一下TMPDIR這個環境變數
(因為windows下沒有 /tmp),把它設為你的暫存資料夾。
接著切換到程式碼的最上層目錄,
鍵入 cscope -R (-R代表會搜尋子目錄),它便會出現一個query的介面,
同時,它也會在目前的目錄下建立symbol的database (cscope.out)。
用上下左右鍵移動到 "Find this c symbol: "
鍵入你要搜尋的關鍵字即可。
搜尋結果會列出所有出現該關鍵字的檔案/行號,
你可以用上下鍵來選擇你想檢視的檔案/行號,按下Enter鍵後就會出現gvim的視窗。
(最好一次只開一個vim視窗)
若你需要再次搜尋不同的關鍵字,只需要按下tab,游標就會移到視窗的下半部。
按下?則會有使用說明;若要離開則按Ctrl+D。
2) 在vim中使用cscope
-自行鍵入關鍵字
在vim中可以用 :cs f s keyword 來搜尋 keyword
(cs -> cscope, f -> find, s -> symbol )
但此步驟前,vim會去讀取目前目錄下的cscope.out,若讀不到就會發生錯誤。
因此最好不要直接用vim去開啟某個.c檔,
而應該用上面 cscope -R -> Find this c symbol的方式來間接開啟vim,
這樣才不會因為你切換到子目錄下而找不到位於最上層的cscope.out。
-以游標所在的位置為symbol關鍵字
按下 Ctrl+'\' 後再按 s
-以游標所在的位置為function關鍵字 (搜尋這個function在那些地方被呼叫)
按下 Ctrl+'\' 後再按 c
-以游標所在的位置為file關鍵字 (搜尋檔案名稱中含有該關鍵字的檔案)
按下 Ctrl+'\' 後再按 f
此外,在某個symbol上按下Ctrl+ ']'
可以直接跳到該symbol的定義處;
若要返回則可以按 Ctrl+ 't' 。
(註: Ctrl+ 'o' 是返回上一個跳躍處)
要特別注意的是,cscope只認得 .c 檔
因此如果你的source是.cpp 或.java,
那你必須用以下的方式:
1) find . -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files
2) cscope -i cscope.files
至於windows的find.exe要去那裡生,就請大家自己想辦法囉。
另外,如果要確定自己的gvim版本是有支援可以在vim下鍵入 ":version"
來確定一下是不是有 "+cscope" 這一段文字。
2008年2月9日 星期六
免安裝、輕量、跨平台的GUI開發環境: code::block+MinGW+wxWidget+wxFormBuilder
wxWidget似乎是我第一個認真學習的GUI framework,
那時候為了幫我叔叔寫程式,survey了一番,最後決定用它來實作。
原因其實很單純,因為它是免費的,而且我的老電腦跑得動。
為什麼不學.NET或Java呢?
首先,我以前對Java的印象一直不是很好(現在有改觀了),
因為它的執行效率實在太慢了,所以很自然的,我對.NET的印象也不太好,
因為總覺得執行一個程式還要run一個底層的virtual machine會造成不必要的overhead。
另外,以前我的電腦也有跑過JBuilder,一直lag快當掉的感覺實在不太好,
看到VS.NET又這麼肥,我就直接淘汰它了。
由於當時對於視窗程式的開發不是很有經驗,
我決定直接找RAD的開發環境,
我選擇了wxDev-C++,它跟BCB有點像,所以還算容易上手。
不過其實搞定整個環境也花了我許多時間,
尤其是搞定 VC 2005 Express Edition compiler的這個部分。
總之,整個安裝過程實在令人覺得有點不耐煩。
(因為有時候電腦總免不了要重灌)
另外,我發現自己的程式也被 "綁" 在wxDev-C++這個開發環境上了,
如果我改天想用其他的開發環境來繼續開發我的程式,
或者那天wxDev-C++突然消失了(wxDev-C++也好久沒有更新了),
我的程式就無法繼續維護了。
基於上述的二種可攜性 (project file的可攜、開發環境的可攜),
以及我喜新厭舊的個性,我決定再換一個開發環境。
經過一番survey後,我決定試試code::block。
其實在決定用code::block之前,我有想到eclipse的cdt
但後來知道eclipse是用Java寫的,並親自體驗了一下它的"龐大"之後,
我決定還是用較輕巧的code::block,如果改天需要寫Java時,再來嘗試eclipse好了。
1. 安裝 code::block
code::block(後面簡稱CB)其實安裝很簡單,
只要直接到 code::block forum 抓取nightly build,
把相關的檔案(包含一些dll)解壓縮到某個資料夾就完成了。
細節可參考
How to use a nightly build
Installing Code::Blocks
2. 安裝 MinGW
MinGW是Minimal GNU for Windows的簡稱,
這個Project主要就是把gcc和gdb等GNU的開發工具移植到Windows上,
使Windows Application Developer也能享受免費而自由的開發環境。
SourceForge(MinGW)
MinGW的安裝過程其實也是把檔案解壓縮到取名為MinGW的資料夾,
不過因為MinGW的檔案很多,且檔案又分成好幾種版本,
因此建議使用它的自動下載程式MinGW-5.1.3來下載,
並用自動安裝程式gdb-6.3-2.exe來安裝gdb。
(gdb部分我沒有測試)
解壓縮完成後還必須把CB的compiler路徑設為MinGW的路徑,
方法如下:
打開CB -> Settings -> compiler and debugger
透過重新設定其值,使CB可以找到它所需要的執行檔案(例如compiler, library)。
其格式為 $(#_VariableName_)
安裝MinGW及gdb後,CB就可以運作了,
你可以試著寫一個簡單的HelloWorld(File -> New -> Project -> Console Application)
來測試看看。
3. 安裝wxWidget
wxWidget是一個跨平台的GUI framework,CB本身就支援wxWidget
(例如new -> project 裡就有一個wxWidget project的選項)
然而nightly built CB似乎沒有內建wxWidget,
所以我們必須自己抓回來編譯、安裝。
SourceForge(wxWidget)
因為我是在windows下,所以我應該抓的檔案是wxMSW-2.8.7.zip
抓下來解壓縮後,你必須使用MinGW的gcc來編譯它。
_MINGW_是剛剛安裝MinGW的目錄
BUILD= release是編譯的一個重要選項,代表編譯出來的library已經經過最佳化,
但如果你想讓編譯出來的library具有debug資訊,讓你可以改為BUILD=debug,
然而,這樣子編譯出來的wxwidget程式執行檔會變得很大(約20mb),
且linking時會耗費許多時間。
但建議BUILD=release及BUILD=debug都各做一次,
這樣可以讓CB在選擇編譯組態時擁有release及debug兩種選擇。
其他的編譯選項請參考
_WXWIN_/INSTALL-MSW.txt 中的Basic options及Advance options
接下來你就可以file-> new -> project -> wxWidgets project來測試看看。
它會出現一個精靈來建立一個wxWidget project
其中,當它問你 wxWidgets' location時,你應該保留$(#wx)這個值,
並設定wx這個global variable為wxWidget的目錄
至於後面的wxWidget libary settings,
其本上如果你沒有用dll, unicode, monolithic等編譯選項來編譯wxWidget的話,
你是不需要打勾的。
至於Create and use precompiled header (PCH)則建議打勾,
可以加快編譯的速度。
最後面會列出一堆wx的class,如果你有用的話就把它選起來 (它是可以多選的)
關於建立wxWidget project的過程可以參考
WxSmith tutorial: Hello world
經驗1.
為什麼我用release組態編譯後,用debug再次編譯會出現compiler error?
->解決方法: 把wx_pch.h.gch這個資料夾刪除後就可以編譯了
經驗2.
為什麼會出現undefined reference to wx....?
->因為linker的設定缺少了一些library,
例如: libwxmsw28d_adv.a(for debug) 或 libwxmsw28_adv.a(for release),
是跟wxGrid相關的library。
設定方式如下:
Project -> build options -> 選視窗左邊的release/debug
->選右邊的 [Linker Settings]
自行加入Link libraries。
(只要輸入名字就好,不需要完整路徑)
4. 安裝wxFormBuilder 3.0
這是一個設計wxWidget GUI的工具,
可以直接用拖拉的方式來建立你的表單,
它可以直接產生C++程式碼,也可以產生XRC檔案。
安裝的方式很簡單,直接到 wxFormBuilder v3.0 Downloads
下載 wxFormBuilder_v3.0.54-RC6-archive
解壓縮到資料夾後即可直接執行。
wxFormBuilder的專案檔是以.fbp結尾,所以在CB中如果點二下開啟.fbp檔時,
你必須先手動選擇wxFormBuilder.exe的路徑,以後它才會自動用wxFormBuilder來開啟。
wxFormBuilder的使用可以參考 UsingWxFormBuilder
註1 WxFormBuilder在layout時是採用Sizer,
所以使用時應該要對wxWidget的Sizer有些基本了解
註2 因為WxFormBuilder在產生程式碼的過程中會覆寫原來的.cpp檔及.h檔,
所以產生出來的Frame應該採用繼承的方式來使用,而不是直接使用。
那時候為了幫我叔叔寫程式,survey了一番,最後決定用它來實作。
原因其實很單純,因為它是免費的,而且我的老電腦跑得動。
為什麼不學.NET或Java呢?
首先,我以前對Java的印象一直不是很好(現在有改觀了),
因為它的執行效率實在太慢了,所以很自然的,我對.NET的印象也不太好,
因為總覺得執行一個程式還要run一個底層的virtual machine會造成不必要的overhead。
另外,以前我的電腦也有跑過JBuilder,一直lag快當掉的感覺實在不太好,
看到VS.NET又這麼肥,我就直接淘汰它了。
由於當時對於視窗程式的開發不是很有經驗,
我決定直接找RAD的開發環境,
我選擇了wxDev-C++,它跟BCB有點像,所以還算容易上手。
不過其實搞定整個環境也花了我許多時間,
尤其是搞定 VC 2005 Express Edition compiler的這個部分。
總之,整個安裝過程實在令人覺得有點不耐煩。
(因為有時候電腦總免不了要重灌)
另外,我發現自己的程式也被 "綁" 在wxDev-C++這個開發環境上了,
如果我改天想用其他的開發環境來繼續開發我的程式,
或者那天wxDev-C++突然消失了(wxDev-C++也好久沒有更新了),
我的程式就無法繼續維護了。
基於上述的二種可攜性 (project file的可攜、開發環境的可攜),
以及我喜新厭舊的個性,我決定再換一個開發環境。
經過一番survey後,我決定試試code::block。
其實在決定用code::block之前,我有想到eclipse的cdt
但後來知道eclipse是用Java寫的,並親自體驗了一下它的"龐大"之後,
我決定還是用較輕巧的code::block,如果改天需要寫Java時,再來嘗試eclipse好了。
1. 安裝 code::block
code::block(後面簡稱CB)其實安裝很簡單,
只要直接到 code::block forum 抓取nightly build,
把相關的檔案(包含一些dll)解壓縮到某個資料夾就完成了。
細節可參考
How to use a nightly build
Installing Code::Blocks
2. 安裝 MinGW
MinGW是Minimal GNU for Windows的簡稱,
這個Project主要就是把gcc和gdb等GNU的開發工具移植到Windows上,
使Windows Application Developer也能享受免費而自由的開發環境。
SourceForge(MinGW)
MinGW的安裝過程其實也是把檔案解壓縮到取名為MinGW的資料夾,
不過因為MinGW的檔案很多,且檔案又分成好幾種版本,
因此建議使用它的自動下載程式MinGW-5.1.3來下載,
並用自動安裝程式gdb-6.3-2.exe來安裝gdb。
(gdb部分我沒有測試)
解壓縮完成後還必須把CB的compiler路徑設為MinGW的路徑,
方法如下:
打開CB -> Settings -> compiler and debugger
- selected compiler選GNU GCC compiler
- [Toolchain executables] 下的compiler's installation directory設為 $(#MINGW_DIR)
- 出現了 "global variable editor" 的視窗,把Builtin fields的base設為你剛剛安裝好的MinGW的路徑
透過重新設定其值,使CB可以找到它所需要的執行檔案(例如compiler, library)。
其格式為 $(#_VariableName_
安裝MinGW及gdb後,CB就可以運作了,
你可以試著寫一個簡單的HelloWorld(File -> New -> Project -> Console Application)
來測試看看。
3. 安裝wxWidget
wxWidget是一個跨平台的GUI framework,CB本身就支援wxWidget
(例如new -> project 裡就有一個wxWidget project的選項)
然而nightly built CB似乎沒有內建wxWidget,
所以我們必須自己抓回來編譯、安裝。
SourceForge(wxWidget)
因為我是在windows下,所以我應該抓的檔案是wxMSW-2.8.7.zip
抓下來解壓縮後,你必須使用MinGW的gcc來編譯它。
cd _WXWIN_
\build\msw set PATH=_MINGW_
\bin; _MINGW_\mingw32\bin mingw32-make -f makefile.gcc BUILD=release
BUILD= release是編譯的一個重要選項,代表編譯出來的library已經經過最佳化,
但如果你想讓編譯出來的library具有debug資訊,讓你可以改為BUILD=debug,
然而,這樣子編譯出來的wxwidget程式執行檔會變得很大(約20mb),
且linking時會耗費許多時間。
但建議BUILD=release及BUILD=debug都各做一次,
這樣可以讓CB在選擇編譯組態時擁有release及debug兩種選擇。
其他的編譯選項請參考
_WXWIN_/INSTALL-MSW.txt 中的Basic options及Advance options
接下來你就可以file-> new -> project -> wxWidgets project來測試看看。
它會出現一個精靈來建立一個wxWidget project
其中,當它問你 wxWidgets' location時,你應該保留$(#wx)這個值,
並設定wx這個global variable為wxWidget的目錄
至於後面的wxWidget libary settings,
其本上如果你沒有用dll, unicode, monolithic等編譯選項來編譯wxWidget的話,
你是不需要打勾的。
至於Create and use precompiled header (PCH)則建議打勾,
可以加快編譯的速度。
最後面會列出一堆wx的class,如果你有用的話就把它選起來 (它是可以多選的)
關於建立wxWidget project的過程可以參考
經驗1.
為什麼我用release組態編譯後,用debug再次編譯會出現compiler error?
->解決方法: 把wx_pch.h.gch這個資料夾刪除後就可以編譯了
經驗2.
為什麼會出現undefined reference to wx....?
->因為linker的設定缺少了一些library,
例如: libwxmsw28d_adv.a(for debug) 或 libwxmsw28_adv.a(for
是跟wxGrid相關的library。
設定方式如下:
Project -> build options -> 選視窗左邊的release/debug
->選右邊的 [Linker Settings]
自行加入Link libraries。
(只要輸入名字就好,不需要完整路徑)
4. 安裝wxFormBuilder 3.0
這是一個設計wxWidget GUI的工具,
可以直接用拖拉的方式來建立你的表單,
它可以直接產生C++程式碼,也可以產生XRC檔案。
安裝的方式很簡單,直接到 wxFormBuilder v3.0 Downloads
下載 wxFormBuilder_v3.0.54-RC6-archive
解壓縮到資料夾後即可直接執行。
wxFormBuilder的專案檔是以.fbp結尾,所以在CB中如果點二下開啟.fbp檔時,
你必須先手動選擇wxFormBuilder.exe的路徑,以後它才會自動用wxFormBuilder來開啟。
wxFormBuilder的使用可以參考 UsingWxFormBuilder
註1 WxFormBuilder在layout時是採用Sizer,
所以使用時應該要對wxWidget的Sizer有些基本了解
註2 因為WxFormBuilder在產生程式碼的過程中會覆寫原來的.cpp檔及.h檔,
所以產生出來的Frame應該採用繼承的方式來使用,而不是直接使用。
訂閱:
文章 (Atom)