wx網羅系列之環境搭建:wxWidget的下載、安裝與編譯

此文轉載自北斗星君的博客,是他的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結束

 

好了,這次的補充到這裏就結束了。

發佈了37 篇原創文章 · 獲贊 2 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章