Windows上配置Code::Blocks + wxWidgets

本文內容來自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項目的配置:

  1. 第一個頁面是簡介,可以選擇以後跳過。
  2. 選擇你要使用的wxWidgets版本。如果你是按照本文的過程配置的,那麼你應該選擇“wxWidgets 2.8.x”。
  3. 設置你的項目的名字的位置。
  4. 輸入作者的信息(非必要)
  5. 選擇自動代碼和文件生成的選項。
  6. 選擇wxWidgets的位置。強烈建議在此使用全局變量:輸入“$(#wx)”(不包含引號)。如果你還沒定義這個全局變量,那麼全局變量對話框會出現,在Base Path中,選擇你的wxWidgets安裝路徑。其他路徑可以不用填。
  7. 爲你的項目選擇debug/release配置。推薦至少選擇debug配置。
  8. 選擇你的wxWidgets構建選項。必須和你構建wxWidgets時所使用的選項一致!如果你按照本文之前的方式構建的,應該將“wxWidgets Library Settings”下的全部三個選項選中。如果用的是wxPack,由於wxPack包含了各種不同的版本,所以你只需要選擇你需要的選項。這個頁面的另一個設置和wxWidgets的構建選項沒有關係,你可以按照喜好來選擇。如果,出於某種原因,你想使用調試版本的wxWidgets構建,選擇“Configure Advanced options”然後在下一頁選擇“Use __WXDEBUG__ and Debug wxWidgets lib”。
  9. 如果需要,選擇額外的庫。一般應用的話應該無須選擇其中任何一個。

構建並運行程序

接下來,就可以選擇“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中的配置

Boward 2007-03-29 14:42:51  來自: Boward(生活在別處)

  1、 安裝
  運行wxMSW-2.8.3-Setup1.exe,將之安裝到不帶空格符號的目錄中,本例爲C:/wxWidgets-2.8.3;
  
  2、 編譯和配置
  具體見C:/wxWidgets-2.8.3/INSTALL-MSW.txt
  (1) 用VC6.0編譯
  進入C:/wxWidgets-2.8.3/build/msw,用VC打開wx.dsw工程文件。進入Build—〉Batch Build,只選中所有工程各自的Win32 Release和Win32 Debug版本,然後開始Build。結果:a)在C:/wxWidgets-2.8.3/build/msw目錄下生成了多個包含了目標文件的目錄,佔了很大空間,可以刪掉;b)在C: /wxWidgets-2.8.3/lib/vc_lib下生成了多個個lib文件,Release和Debug版本各一半,另外還包括了msw和mswd兩個目錄,裏面含有Release和Debug版的setup.h。
  (2) 在VC6.0中配置
  Tools—〉Options—〉Directories,在選中“Include Files”後,添加
  C:/wxWidgets-2.8.3/include
  C:/wxWidgets-2.8.3/lib/vc_lib/msw
  C:/wxWidgets-2.8.3/lib/vc_lib/mswd
  路徑;選中“Libraries Files”,添加
  C:/wxWidgets-2.8.3/lib/vc_lib。
  (3) 檢驗效果
  進入C:/wxWidgets-2.8.3/samples/listbox,打開該工程,Project—〉set active project—〉listbox,在Project—〉Dependencies中把core和base兩個去掉鉤。編譯,運行,通過。
  
  3、建立wxWindows工程
  (1) 新建 —〉Win32 Application,創建空工程,
  (2) 工程 —〉設置:
  C/C++選項卡->Code Generation -> use run-time library 設置爲: Debug MutilThread DLL
   
鏈接器->輸入->附加依賴項目 設置爲: wxmsw28d_core.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib oleacc.lib odbc32.lib.
  一般的wxDigets GUI項目比普通windows 程序多wxmsw28d_core.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.lib wxexpatd.lib這些Lib.

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