1. 程式人生 > >編譯wxWidgets —— windows、vc71、bcc32、MinGW與命令行

編譯wxWidgets —— windows、vc71、bcc32、MinGW與命令行

組件 make 特性 ide document art 有一個 性能 學習

編譯wxWidgets —— windows、vc71、bcc32、MinGW與命令行

http://www.diybl.com/course/3_program/vc/vc_js/20071226/93502.html#

wxWidgets 是一個極具名望的提供圖形界面支持的C++庫,你可以用它來開發桌面應用(當然你也可以用它來開發Console程序,不過這並不常見)。

簡單來說wxWidgets有這樣幾個特性:

①開源。當然我並不在乎它是否開源,我只在乎它是否免費。

②移植性極佳。支持很多操作系統和編譯器,在C++領域,這一直是一個極具吸引力的特性。

③ 本地風格的窗體。也就是“native look and feel”,比如你用wxWidgets在windows下開發出來的桌面應用和使用windows api或者MFC開發出來的程序在控件風格、用戶感受方面都非常相似(或者說完全一致)。這首先意味著當程序作為源生二進制文件發布時,用戶將獲得最熟悉 的感受,其次,這也意味著wxWidgets窗體擁有著最令人滿意的性能。



為什麽要用wxWidgets?我不知道上面幾條是否已經為你提供了足夠的理由。對我個人來說,除了原生程序與可移植性(這兩條的確對我構成了誘惑)之外,學習使用wxWidgets還有一點十分特別的價值,那就是wxPython 。 wxPython是一個無限美好的東西,其存在使得Python成為開發桌面應用的上佳之選!優雅的Python代碼,快捷的開發速度,逼進C++的用戶 界面響應,深度可能的視覺感受——如果不是Python和wxPython需要額外的運行時環境支持,我恐怕會首選Python做為桌面開發的語言。 wxPython是wxWidgets的移植,其血脈相傳使得wx的學習具有雙重價值。(事實上,wxPython與wxWidgets共享一份文檔,不 過這份文檔對Python的支持並不好。)

順便插一句,在我看到wxPython開發出來的應用之後,甚至懷疑wxWidgets開發出來的程序是否能夠得到更好的用戶響應。wxWidgets沒有令我失望。

好啦,wxPython的美好先放在一邊,我們此次要面對的是wxWidgets^_^

此篇只講wxWidgets在windows下的安裝、編譯及測試,linux下和wxWidgets的開發放在後續文章之中。


我的操作系統是Windows XP。

下載與安裝:

你可以在wxWidgets的官方站點找到最新版本的下載(http://www.wxwidgets.org/downloads/ ),或者直接到SoureForge(http://sourceforge.net/project/showfiles.php?group_id=9863 )下載。如果你只需要在windows下使用,下載wxMSW,如果還要在其他平臺上應用,可以下載wxAll。

在我寫這篇文章的時候,最新的穩定版本是2.8.3。

下載之後運行安裝或者解壓到你指定的目錄就可以進入下一步了。以後我們提“wxWdigets目錄”指的就是這個安裝目錄。例如我的wxWidgets目錄是F:/libs/wxWidgets-2.8.3。

提示:wxWidgets目錄下docs/msw/install.txt是一份安裝指導,你可以獲得大多數你需要的參考。



編譯:

首先介紹下我手頭的三款編譯器,它們分別是VC7.1(2003),Borland C++ Compiler 5.5,MinGW。我假設你至少正確安裝了其中的一款編譯器。

編譯的過程其實是很簡單的,我們所使用的工具是命令行。如果你定要使用Visual Studio的IDE,我們也給出一點提示。


①VC7.1(Visual Studio .NET 2003)

註:如果你使用的vc6或者vc8,過程都是類似的。

要使用VC7.1來編譯wxWidgets,首先要保證載入了合適的環境變量。

方 法零:如果你的環境變量是自動註冊的,那就不必再載入了。測試方法:先啟動一個命令行窗口(開始菜單->運行->cmd),敲入nmake或 cl,如果顯示“不是內部或外部命令,也不是可運行的程序或批處理文件”,那你的環境變量沒有自動註冊,你需要使用以下方法中的一個來載入(別忘了載入之 後測試下)。

方法一:最好的方法是使用VC提供的命令行工具,啟動方式如下:開始菜單->Microsoft Visual Studio .NET 2003-> Visual Studio .NET 工具->Visual Studio .NET 2003 命令提示。

方法二:如果你沒有在開始菜單裏面找到方法一中的命令行工具,可以手動載入一個bat,bat位置一般是:Microsoft Visual Studio .NET 2003/Common7/Tools/vsvars32.bat。其中Microsoft Visual Studio .NET 2003是你的VS.NET安裝目錄。比如我的VS安裝目錄是F:/Microsoft Visual Studio .NET 2003,載入方式如下:先啟動一個命令行窗口(開始菜單->運行->cmd),然後敲入"F:/Microsoft Visual Studio .NET 2003/Common7/Tools/vsvars32.bat"(註意,需要加上引號)。

方 法三:如果你用的是vc6,可能沒有vsvars32.bat這個文件,沒關系,我們還有一個vcvars32.bat。不過還是以vc7.1為例:啟動 命令行窗口,敲入"F:/Microsoft Visual Studio .NET 2003/Vc7/bin/vcvars32.bat"(註意,需要加上引號)。如果你的是vc6,需要調整相應路徑。

現在你的環境變量已經註冊好了,但是請不要關掉你的命令行窗口!我們還有很重要的事要做^_^

以我的環境為例,進入wxWidgets目錄下的build/msw文件夾:

C:/Documents and Settings/username>F:
F:/>cd libs/wxWidgets-2.8.3
F:/libs/wxWidgets-2.8.3>cd build/msw
F:/libs/wxWidgets-2.8.3/build/msw>

接 下來就要進入編譯的真正環節。編譯wxWidgets有一些選項,可以參考wxWidgets目錄下的docs/msw/install.txt。一般來 說最常用的兩個選項是Debug/Release,以及Unicode/ANSI。默認的編譯版本是Debug+ANSI。

如果你想使用默認選項,鍵入:

nmake -f makefile.vc

如果你想手動設置一些編譯選項,比如使用Uniocde+Release版本,鍵入:

nmake -f makefile.vc BUILD=release UNICODE=1

你當然可以按你的需要編譯幾套wxWidgets。在我的機器上(2003年的機器),編譯一個版本的wx,大概只需要5分鐘作用,你的機器很可能會更快。每套wx需要約200M~300M的硬盤空間。


②Borland C++ Compiler 5.5

如果你使用bcc32,那麽我假定你已經安裝過borland的命令行編譯器。對不起我沒有用過C++ Builder,但是我想C++ Builder也是包含這一套命令行工具的。

使 用bcc32需要borland提供的make程序。在我電腦上bcc32安裝的目錄是F:/Program Files/BCC55,所以這個make的路徑是F:/Program Files/BCC55/Bin/make.exe。你可能希望把它放入環境變量,這個隨你的喜好,不過在編譯wxWidgets的時候我還是推薦你使用 絕對路徑,因為你的機器上可能有多個make,而且他們之間幾乎都是不兼容的(至少我機器上就是這樣),所以你敲make的時候可能需要額外的精力來關 註。

下面進以我的環境為例,進入wxWidgets目錄下的build/msw文件夾:

C:/Documents and Settings/username>F:
F:/>cd libs/wxWidgets-2.8.3
F:/libs/wxWidgets-2.8.3>cd build/msw
F:/libs/wxWidgets-2.8.3/build/msw>

接 下來就要進入編譯的真正環節。編譯wxWidgets有一些選項,可以參考wxWidgets目錄下的docs/msw/install.txt。一般來 說最常用的兩個選項是Debug/Release,以及Unicode/ANSI。默認的編譯版本是Debug+ANSI。

如果你想使用默認選項,鍵入:

"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc

註意:如果你的make路徑中有空格(如Program Files),需要在make路徑兩邊加上雙引號。

如果你想手動設置一些編譯選項,比如使用Uniocde+Release版本,鍵入:

"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc -DBUILD=release -DUNICODE=1

註意:此處的變量定義語法與其他的make不同。

如果你確認你的PATH環境變量中包含了正確的make,也可以直接敲:

make -f makefile.bcc

或者:

make -f makefile.bcc -DBUILD=release -DUNICODE=1

你可以按需要編譯幾套wxWidgets。在我的機器上(2003年的機器),編譯一個bcc32版本的wx,大概只需要5分鐘作用,你的機器很可能會更快。每套wx需要約200M左右的硬盤空間,比VC占用的要小些。


③MinGW

憑良心講,我並不推薦你在MinGW中使用wxWidgets。

MinGW版本的編譯步驟比較繁瑣,編譯時間漫長,編譯出來的庫更是巨大。但是據說MinGW Studio附帶有編譯好的wx,不知道是不是真的。

我是參照這篇文章進行的,所以你也可以將其作為參考:http://www.wxwidgets.org/wiki/index.php/Compiling_WxWidgets_With_MSYS-MinGW

首先你要安裝MinGW(我假設你已經安裝好了),為了有一個類unix的shell,我們還需要安裝MSYS(下載地址:http://www.mingw.org/download.shtml )。

註意:MSYS的安裝路徑不能有空格(我印象中如此)。

安裝好MSYS啟動msys,出現一個shell,進入wxWidgets的目錄。以我的環境為例:

cd /f/libs/wxWidgets-2.8.3

新建一個目錄,比如叫mingw-debug:

mkdir mingw-debug

進入目錄:

cd mingw-debug

配置MinGW的工程:

../configure --disable-shared --enable-debug

你可以使用../configure --help來查看其它選項,比如編譯uncode版本需要--enable-unicode,編譯release版本需要--disable-debug。

這個配置過程花費了我大約10分鐘時間。

配置之後在目錄中運行make即可:

make

這個過程又消耗20分鐘左右,1.7G的硬盤。比起前面兩款編譯器,實在並不令人愉快。


④VC的IDE

如果你使用VC6,那麽也可以使用此方法。

進 入wxWidgets目錄下的build/msw文件夾,有一個wx.dsw,運行之。你可以在build窗口(即平常顯示debug或release的 那個窗口)中選擇需要編譯的版本,如“Win32 Debug”、“Win32 Unicode Release”,還是挺方便的^_^。(註:如果沒有顯示此窗口,在工具欄上右擊,跳出的菜單中選中"build"即可。)

此過程時間空間的耗費請參考①。



到 這裏編譯的大部分內容都已經完成,下面你可能想體驗一下wxWidgets。在wxWidgets目錄下有一個samples子目錄,有很多小程序,用以 展示wxWidgets的各個組件;wxWidgets目錄下另有一個demos目錄,裏面有幾個小應用(包括一個小的掃雷遊戲和紙牌遊戲和其他)。

你可以進入相應的samples目錄或者子目錄,然後按上面編譯wxWidgets一樣的方法來編譯這些例子。

以samples下的controls為例:

①VC7.1(Visual Studio .NET 2003)

按前面所述配置好環境變量並編譯過wxWidgets之後,進入samples/controls,然後按你編譯過的庫版本編譯這個示例。

如果你編譯wxWidgets時使用的是:

nmake -f makefile.vc

那麽就使用同樣的命令編譯示例:

nmake -f makefile.vc

如果你編譯wxWidgets時使用的是:

nmake -f makefile.vc BUILD=release UNICODE=1

那麽編譯示例的時候使用:

nmake -f makefile.vc BUILD=release UNICODE=1

如果你使用“nmake -f makefile.vc”編譯庫卻使用“nmake -f makefile.vc BUILD=release UNICODE=1”編譯例子,會觸發所依賴的庫被編譯。

②Borland C++ Compiler 5.5

編譯過wxWidgets之後,進入samples/controls,然後按你編譯過的庫版本編譯這個示例。

如果你編譯wxWidgets時使用的是:

"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc

那麽就使用同樣的命令編譯示例:

"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc

如果你編譯wxWidgets時使用的是:

"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc -DBUILD=release -DUNICODE=1

那麽編譯示例的時候使用:

"F:/Program Files/BCC55/Bin/make.exe" -f makefile.bcc -DBUILD=release -DUNICODE=1

如果你使用A命令編譯庫卻使用B命令來編譯例子,會觸發所依賴的B庫被編譯。

註 意:如果你認為自己設置了合適的PATH環境變量,並使用make -f makefile.bcc這樣的簡潔命令成功編譯過了wxWidgets,那麽此時依舊要註意。如果你PATH中的make.exe不是BCC的bin目 錄中的那個,那麽你很可能會失敗。無論如何,倘若你得到了一個錯誤,可以考慮像上面一樣使用BCC55/Bin/make.exe的絕對路徑。

③MinGW

如果你按前面的方法在MinGW下編譯過了MinGW,那麽進入剛剛新建的MinGW工程目錄(比如mingw-debug)下的samples/controls(而不是wxWidgets主目錄下的samples/controls)。

然後只要敲:

make

因為其他的配置已經註冊到你建的整個工程中了(比如mingw-debug)。

④VC的IDE

在示例的目錄下也有相應的VC6工程文件,如controls.dsw。打開它,選擇相應的版本(如“Win32 Debug”),運行之。


你也可以選擇編譯所有的samples。只要在samples的目錄(而不是controls之類的子目錄)敲相應的make命令(或者使用此目錄下的VC工程文件)即可,方法和編譯單個例子完全一樣——但是請先不要試!

編譯一套wxWidgets的所有samples需要占用極長的時間和硬盤空間(不少於30分鐘和1.5G硬盤)!所以在準備編譯所有例子之前確認你有足夠的時間和空間——以及一點耐心和寵辱不驚的氣度!

警告:不要試圖用MinGW編譯全部的samples!除非你有15G的剩余空間和2個小時的清閑時間——以及一點無聊和自我犧牲的精神(如果你完成了這些,可以把你統計到的具體數據發給我^_^)。


編譯了你需要的例子之後就可以執行這些示例了。在相應的目錄下(如controls)會有對應的目錄(如vc_mswd,如果你使用debug版本的vc),裏面有你期待著的可執行程序。運行它!

從 體積上來講,編譯出來的wxWidgets應用,debug版本大約2M多,release版本1M多,比MFC要大一些。不過這個年代(以及將來的歲月 裏),1M不到的差距是在無關痛癢。例外:MinGW編譯出來的debug版本的示例大小一般為12M以上!由於我沒有足夠的空間(和時間)編譯 release版本的wxWidgets,所以不知道release版本的應用大小如何。如果有人成功編譯了這些,可以寫信告訴我實際的數據。



在windows下編譯wxWidgets到這裏就結束了。以後很可能會寫些linux下的編譯文章,以及如何使用wx建立自己的應用(包括Bakefile的使用)。

我 想這篇文章一定顯得十分冗長,詳略得當對我來說實在是很困難。有好的建議和批評歡迎寫信給我:[email protected]。你也可以在此文之後留 言,但是等我發現有人在此處留言恐怕是一個月之後的事了,而一個月之後你若還能想起曾在這裏留言,恐怕更是人類移居火星之後的事了。

http://blog.csdn.net/idx001/article/details/5213271

編譯wxWidgets —— windows、vc71、bcc32、MinGW與命令行