本文內容來自Code::Blocks wiki上的WxWindowsQuickRef,本文內容並非按照原文完全逐字逐句的翻譯。
Code::Blocks是一個跨平臺的C++IDE,支持Windows、Linux、MacOSX。同時他還支持各種不同的編譯器,如GNU/MinGW C/C++,VC++ 6.0/2003/2005/2008,Borland C++,Digital Mars等等各種不同的編譯器。
經過14個組員長達2年對Code::Blocks的全部重寫,終於發佈了正式版8.02,這個版本更包括了對構建基於wxWidgets的跨平臺GUI程序的支持,堪比Visual C++。
wxWidgets則是一個十分優秀的跨平臺的GUI框架,用其編寫的C++應用程序可以十分方便地遷移到不同的系統上去。
Code::Blocks + wxWidgets兩個同是支持跨平臺的IDE和框架,使得跨平臺的編程非常方便。然而Code::Blocks雖然包含了對wxWidgets的支持,但是卻沒有包含wxWidgets的構建環境,我們必須手動進行配置。另外,Code::Blocks有一個安裝包包含了MinGW的編譯器,如果使用別的編譯器,同樣也需要自己進行相應的配置。
前提準備
編譯器
你至少應該正確安裝了免費的MinGW/GCC編譯器或者是某種微軟的編譯器(Express editions是免費的,但是你還需要安裝Platform SDK)。如果是用MinGW/GCC,至少要準備gcc-core、gcc-g++、binutils、w32api以及mingw32-make包;同時,確保包含編譯器可執行文件的目錄(一般是C:/MinGW/bin
)在Windows的PATH環境變量中。
如果選擇MinGW/GCC編譯器,可以在直接選擇包含MinGW的Code::Blocks安裝包,見下一節。
最新版的Code::Blocks
請下載最新的8.02發佈版。尚未選擇編譯器可以選擇包含MinGW的安裝包。
wxWidgets
你可以選擇下載wxWidgets的源代碼然後自己進行構建,或者是直接安裝預編譯的wxPack。
wxWidgets源代碼
安裝包較小,可以根據自己的需求進行自定義構建,但是需要花費長時間進行編譯。如果不清楚編譯選項,可能導致無法成功配置Code::Blocks。
目前推薦的wxWidgets的版本是2.8.7。點擊此處下載wxWidgets 2.8.7源代碼Windows安裝包 (wxMSW-2.8.7-Setup.exe; 12.0 MB)。你也可以檢查一下wxWidgets的下載頁面看看有沒有更新的穩定版下載。強烈建議你將代碼安裝到不帶空格的路徑中。必須保證盤中至少有300MB的剩餘空間。
wxPack
雖然安裝包達200MB,全部安裝需要3G,但是包含了預編譯的所有可能用到的庫文件,而且包含VC和GCC的兩種版本,可以不用去考慮構建選項了。
當前wxPack的穩定發佈版是 v2.8.7.03,基於 wxWidgets 2.8.7。點擊此處下載 wxPack v2.8.7.03 (wxPack_v2.8.7.03.exe, 236.9 MB)。你也可以查看wxPack下載頁面看看有沒有更新的穩定版下載。強烈建議將wxPack安裝到沒有空格的路徑中。如果你選擇只MSVC版本,應保證至少有700MB的剩餘空間;如果只選擇MinGW/GCC版本,則應保證至少有2.2GB的剩餘空間。
提示
如果磁盤使用了NTFS格式,可以開啓文件壓縮功能,上述的目錄在壓縮後可以減少50%的空間佔用。
編譯wxWidgets
使用wxPack則可以跳過這一步。
打開命令行(在開始菜單中點擊“運行”,輸入cmd並回車)。如果使用的MSVC,你可以使用特定的用於設置環境變量的命令行。如果你使用的MSVC版本還要求你單獨下載Platform SDK,確保全部包含了標準編譯工具和Platform SDK中要用到的環境變量。
轉到wxWidgets的構建目錄,其中<wxWidgets>是源碼所在路徑,通常是C:/wxWidgets-2.8.7
:
cd <wxWidgets>/build/msw
執行構建命令,MinGW/GCC推薦的命令是:
mingw32-make -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1
MSVC推薦的構建命令是:
nmake -f makefile.vc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1
這個過程需要花很久,快的機器大概30分鐘可以完成,慢的可能就需要幾個小時了。
如果使用的GCC的版本較新,構建過程中可能會出現大量的警告。這樣會明顯導致構建過程變慢;你可以將錯誤信息重定向到文件中,在上述命令後面添加2> err.log
,也可以通過2>nul
直接禁止警告信息。
其中關於BUILD、SHARED、MONOLITHIC以及UNICODE選項的解釋,請仔細參考文章後面關於wxWidgets的構建參數的解釋,這些參數十分關鍵,他們直接定義了你所使用的基本的wxWidgets開發環境。你必須嚴格按照你的編譯參數設置Code::Blocks的配置嚮導。
在Code::Blocks中創建wxWidgets項目
在Code::Blocks的起始頁面中,選擇“Create a new project”,也可以在File菜單中,選擇“New” -> “Project…”。
找到並選擇“wxWidgets project”,並創建,接下來會出現一個嚮導幫助進行wxWidgets項目的配置:
- 第一個頁面是簡介,可以選擇以後跳過。
- 選擇你要使用的wxWidgets版本。如果你是按照本文的過程配置的,那麼你應該選擇“wxWidgets 2.8.x”。
- 設置你的項目的名字的位置。
- 輸入作者的信息(非必要)
- 選擇自動代碼和文件生成的選項。
- 選擇wxWidgets的位置。強烈建議在此使用全局變量:輸入“$(#wx)”(不包含引號)。如果你還沒定義這個全局變量,那麼全局變量對話框會出現,在Base Path中,選擇你的wxWidgets安裝路徑。其他路徑可以不用填。
- 爲你的項目選擇debug/release配置。推薦至少選擇debug配置。
- 選擇你的wxWidgets構建選項。必須和你構建wxWidgets時所使用的選項一致!如果你按照本文之前的方式構建的,應該將“wxWidgets Library Settings”下的全部三個選項選中。如果用的是wxPack,由於wxPack包含了各種不同的版本,所以你只需要選擇你需要的選項。這個頁面的另一個設置和wxWidgets的構建選項沒有關係,你可以按照喜好來選擇。如果,出於某種原因,你想使用調試版本的wxWidgets構建,選擇“Configure Advanced options”然後在下一頁選擇“Use __WXDEBUG__ and Debug wxWidgets lib”。
- 如果需要,選擇額外的庫。一般應用的話應該無須選擇其中任何一個。
構建並運行程序
接下來,就可以選擇“Build and run”(F9)對程序進行構建並運行了。如果順利,你的wxWidgets應用程序就會出現。如果出現了什麼問題,你可以參考後面的常見問題。
wxWidgets編譯選項簡介
BUILD
BUILD控制wxWidgets構建調試版本(BUILD=debug)或者是發佈版本(BUILD=release)。絕大多數情況下你只需要wxWidgets的發佈版本就可以了,因爲你應該不想要去調試wxWidgets自身,同時你依然可以通過鏈接wxWidgets的發佈版本來構建你自己的程序的調試版本。
- 調試構建wxWidgets會創建帶有”d”後綴的庫,例如”libwxmsw28d.a”、”wxmsw28d_gcc_custom.dll”。
- 調試構建wxWidgets會在wxWidgets庫的輸出目錄中創建”mswd” 或者 “mswud” 目錄。
- 發佈構建wxWidgets創建的庫沒有”d”後綴,例如”libwxmsw28.a”、”wxmsw28_gcc_custom.dll”。
- 發佈構建wxWidgets會在wxWidgets庫的輸出目錄中創建”msw” 或者 “mswu” 目錄。
SHARED
SHARED控制wxWidgets是構建DLL(SHARED=1)還是靜態庫(SHARED=0)。利用構建的DLL,主程序構建時間較快,可執行文件更小。但是可執行文件加上wxWidgets DLL的總大小更大,但是不同的可執行文件可以使用同一個DLL。
- wxWidgets的DLL構建會創建導入庫(如 libwxmsw28.a)以及DLL文件(如wxmsw28_gcc_custom.dll)。你必須在發佈你的程序的時候包含這個DLL。
- wxWidgets的靜態構建只會創建靜態庫(如 libwxmsw28.a),發佈的時候也無須包含wxWidgets的DLL。
MONOLITHIC
MONOLITHIC控制是構建一個單一的庫(MONOLITHIC=1)還是多個組件庫(MONOLITHIC=0)。使用單一構建,項目的設置和開發會更加簡單,如果你同時使用DLL構建的話,你只需要分發一個DLL文件。如果使用非單一構建(multilib),會構建出多個不同的庫同時你可以避免將整個wxWidgets的基本代碼鏈接到主程序,就可以去掉不需要的庫。同時你也必須確保你選擇了正確的組件庫。
- wxWidgets的單一構建僅會創建一個wxWidgets導入庫(如libwxmsw28.a)以及一個DLL(如wxmsw28_gcc_custom.dll)。
- wxWidgets的多庫(multilib)構建會創建多個導入庫(libwx28_base.a等)以及多個DLL文件。
- 無論何種wxWidgets構建,都會創建額外的靜態庫(如libwxexpat.a、libwxjpeg.a等)。這些庫對於wxWidgets的DLL構建一般是不需要的,但是當使用靜態構建的時候,則是必須的。
UNICODE
UNICODE控制wxWidgets以及你的程序是否使用支持Unicode的寬字符串。大多數Windows 2000或更高系統上的應用程序都應該支持Unicode。早期的Windows版本不一定有Unicode支持。你應該總是使用wxWidgets的_("string")
和_T("string")
宏來確保硬編碼的字符串編譯時是正確的類型。
- wxWidgets的Unicode(UNICODE=1)構建將會創建帶有”u”後綴的庫,例如”libwxmsw28u.a”、”wxmsw28u_gcc_custom.dll”。
- wxWidgets的Unicode構建會在wxWidgets庫的輸出目錄中創建”mswu”或”mswud”目錄。
- wxWidgets的ANSI(UNICODE=0)構建創建的庫沒有”u”後綴,例如”libwxmsw28.a”、”wxmsw28_gcc_custom.dll”。
- wxWidgets的ANSI構建會在wxWidgets庫的輸出目錄中創建”msw”或”mswd”目錄。
常見問題
出現類似於”wx/setup.h: No such file or directory”的錯誤
你在構建選項中缺少了很重要的編譯器搜索路徑。首先確認你是否在運行wxWidgets項目嚮導的時候正確選擇了wxWidgets的構建配置。如果重新運行嚮導並配置依然無效,那麼打開你的項目的構建選項並給編譯起的搜索路徑中添加”$(#wx.lib)/gcc_dll/mswu
“(這裏假設是一個單一的Unicode DLL構建)。
出現類似於”cannot find -lwxmsw28u”的錯誤
構建選項中的鏈接庫錯了。首先確認你是否在運行wxWidgets項目嚮導的時候正確選擇了wxWidgets的構建配置。如果重新運行嚮導並配置依然無效,確定你構建了什麼庫,並相應在構建選項中調整庫的名字。
wxWidgets-2.8.3編譯和在VC中的配置
2007-03-29 14:42:51 來自: Boward(生活在別處) 1、 安裝 |