此文轉載自北斗星君的博客,是他的Dev-Cpp/Mingw32 環境介紹系列教程中的幾章。他博客地址爲:http://blog.csdn.net/visioncat/ 和 http://nirvana.cublog.cn/ 。此文爲他高中時所寫。
皿<script src="http://blog.csdn.net/count.aspx?ID=286984&Type=Rank" type="text/javascript"></script>
第十四章 wxWidget的下載與安裝
這一章我將爲各位介紹如何下載安裝wxWidget這個GUI開發庫。
首先,我們先要知道,我們是在win32下使用wxWidget的。所以,我們現在要下載的是wxMSW這個開發庫。MSW我想你也知道是什麼意思。直到這篇文章寫出來,wxMSW的最新版本是2.5.3。現在你可以從www.sf.net上下載,也可以在如下地址下載。http://umn.dl.sourceforge.net/sourceforge/wxwindows/wxMSW-2.5.3.zip。都是一樣的。我通常喜歡用umn.dl.sourceforge.net的下載。偏愛吧。還有,wsMSW-2.5.3.zip是一個免安裝的wx。而另一個wxMSW-2.5.3-setup.zip是需要安裝的。差別不是太打。如果問我,我比較喜歡wxMSW-2.5.3.zip。
然後,我們就在你的驅動器上建立一個目錄叫 wxWidget-2.5.3。並把壓縮包裏的文件解壓到該目錄中。注意要全部解壓。當然如果你想少解一點(至少我全部都要)你可以解如下的文件夾和文件。不過注意,路徑不能更改。否則的話麻煩就大了。(也就是說原來的路徑是 build/msw/makefile.vc 你不能用makfile.vc替代)
build/msw/config.gcc
build/msw/makfile.gcc
include/
lib/
src/
還有一個contrib這個目錄其實並不是很重要。至少你在平時使用中不會很多的用它。如果需要你可以解開,但是通常只有在需要的時候纔會編譯。
這樣我們的庫就算安裝好了。當然,如果你是Dev-Cpp的朋友。你可以按照我前面介紹的自定義工程,來設置工程的參數。這裏,我們在編譯器參數中加入
-I(安裝目錄)/include/
連接器參數加入
-L(安裝目錄)/lib/
好了,這章就到這裏了。
第十五章 wxWidget的編譯與用wxWidget編譯程序
現在我們用cmd.com進入build/msw。如果你按照我在第一章介紹的方式設置了。那麼輸入
make -f makefile.gcc
讓make來編譯程序。在一陣狂編之後。我們就算安裝好了wxWidget。這是我們就進入demo/bombs/這個目錄,輸入
make -f makefile.gcc
就可以嘗試我們編譯的結果了。你可以將提示符出現的編譯參數作爲鏈接參數和編譯參數給Mingw32使用編譯自己的工程。
編譯完成後,你會看到在bombs的gcc_debug目錄裏有一個文件bombs。運行一下,一個掃地雷出現了。(我一直不會玩掃地雷,也許我的智商不高)。也許你會下意識的看看文件的體積…… 哇!你會恐懼的發現這個程序要 12MB 那麼大……。你不用害怕,因爲這個是調試用的庫。所以加入了大量的調試內容。12MB也是應當的。
好了,現在我們來編譯一個小小的wxWidget庫。還是一樣,我們在編譯的時候要使用一個參數。我們在build/msw/下輸入
make -f makefile.gcc BUILD=release
好現在,我們就可以得到release的庫了。同樣,編譯一下bombs來看看。進入gcc_release目錄,程序一樣運行,但是體積卻小了N多。如果壓縮一下,程序還會更小都不滿1MB。
但是,我們還要更小更小的庫。通常,現在網上絕大部分都介紹到上面第二種編譯方式,這已經相當不錯了。通常只有第一種。下面我就來介紹一下一個比較特別的編譯方式。
如果各位用過MFC就會知道,其實MFC使用的是動態鏈接庫,這樣可以加大重複代碼的利用率。如果更新主程序就不需要更新動態庫的內容了。所以,我下面介紹如何把wxWidget編譯進動態鏈接庫中。
同樣我們要進入build/msw/目錄。同樣用make。輸入
make -f makefile.gcc BUILD=release SHARED=1
首先注意大小寫,另外,release參數是必須的,否則就會生成那種可怕的恐龍文件。但是缺點是不能對wxWidget進行調試。在一段時間的編譯後,我們就會在lib/gcc_dll中得到動態鏈接庫和庫文件。如果你想長期使用,就把*.dll複製到 ~/system32/目錄中去好了。或者設置PATH值爲該目錄。接下來我們就來編譯bombs測試。輸入
make -f makefile.gcc BUILD=release SHARED=1
這次我們會在gcc_dll目錄中找到bombs。如果直接運行,你會看到錯誤提示。當然如果你把動態鏈接庫複製到/system32/目錄中就不會看到了。我們把bombs.exe複製到lib/gcc_dll/目錄中,運行後,就會看到程序界面。不過……看看體積……我的天,100多KB。夠小了吧。我們就用這個開發wxWidget吧 ^_^
下面列出編譯器的參數和連接器的參數好讓各位創建自定義工程。
編譯器參數:
-O2 -DHAVE_W32API_H -D__WXMSW__ -I(wxWidgets)/include -I(wxWidgets)/lib/gcc_dll/msw -Wall -I. -DWXUSINGDLL -I(wxWidgets)/samples -DNOPCH
連接器參數:
-mthreads -L(wxWidgets)/lib/gcc_dll -Wl,--subsystem,windows -mwindows -lwxmsw25_core -lwxbase25 -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32
其中(wxWidgets)代表你安裝wxWidget的位置。
好了,這次的wxWidget之行就到這裏了。希望你能成功的走過第三步。
文外音:
其實,我早就喜歡用wxWidget了,只是生成的文件實在嚇人。所以遲遲不敢再用。後來轉用gtk。不過我也研究到底怎麼樣把wxWidget體積縮小。所以,這次我徹底的縮小了文件體積。真是一大幸事啊。不過,如果你在編譯的時候發現任何的問題。可以在我的Blog響應文件的後面提出,最好留下你的郵箱地址,這樣我就能以最快的速度回覆你。同時希望你能關注我的文章。http://blog.csdn.net/visioncat/ 。當然本系列文章還沒有結束。還在補充中。因爲前期很忙,所以幾個月沒有更新造成了有人誤認爲我的文章結束了。哈,不好意思。
補充內容:
從讀者的回覆中,發現原來本文還是有些地方不很清楚。因此,在這裏做一個小小的補充。
讀者提出,是否能給出一個更簡單的wxWidget的例子。所以,我在這裏給出一個簡單的makefile文件和一個main.cpp文件給各位。
#makefile.txt
#這個Makefile是針對使用Dll的wxWidget
#請將下面的wxPath的參數./改成你wxWidget的安裝目錄
wxPath=./
CF=-O2 -DHAVE_W32API_H -D__WXMSW__ -I$(wxPath)/include -I$(wxPath)/lib/gcc_dll/msw -Wall -I. -DWXUSINGDLL -I$(wxPath)/samples -DNOPCH
LF=-mthreads -L$(wxPath)/lib/gcc_dll -Wl,--subsystem,windows -mwindows -lwxmsw25_core -lwxbase25 -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32
#Makefile結束
//main.cpp
//這個文件是使用Dll的wxWidget的主程序,是一個窗口(空白)
#include <wx/wx.h>
class MainApp:public wxApp
{
public:
virtual bool OnInit(void);
private:
wxFrame *mainFrame;
};
IMPLEMENT_APP(MainApp)
bool
MainApp::OnInit()
{
mainFrame = new wxFrame((wxFrame*) NULL, -1, "wxWindows");
mainFrame->Show(TRUE);
return TRUE;
}
//main.cpp結束
好了,這次的補充到這裏就結束了。