wxWidgets 在 Windows 下開發環境配置


本文基於 CodeBlocks (16.01) 和 wxWidgets (3.0.2) 搭建 Windows 環境下 GUI 開發環境。

 

1.  CodeBlocks 官網,下載最新版安裝包 codeblocks-16.01mingw-setup.exe

  此版本包含GCC,GDB,官網介紹為: NOTE: The codeblocks-16.01mingw-setup.exe file includes additionally the GCC/G++ compiler and GDB debugger from TDM-GCC (version 4.9.2, 32 bit, SJLJ).

  我的安裝目錄: C:\Program Files (x86)\CodeBlocks, 后續編譯要用到 CodeBlocks 內含的編譯器,故將 C:\Program Files (x86)\CodeBlocks\MinGW\bin 添加到環境變量 Path。

 

2.  wxWidgets 官網,下載源碼包,各文檔介紹如下圖,

 

 

 

 

 

 

 

 

 

 

     

 

3. 解壓縮 wxMSW-3.0.2.7z 到 C:\wxMSW-3.0.2, 在該目錄下,新建 bat 文件 wxBuild_ver.0.1.bat, 內容如下,

  @echo off  
  cd build/msw  
  title Compile wxWidgets  
  echo Start Compile ...  
  echo ---------------------------------------------------------------------  
  
  ::echo Clean Env
  ::mingw32-make -f makefile.gcc clean

  echo Compile Release Version
  :: SHARED=0, Static Link Library. SHARED=1, Dynamic Link Library.
  :: MONOLITHIC=0, Multiple Widgets. MONOLITHIC=1, Single Widgets.
  :: UNICODE=0, Not Support Unicode. Unicode=1, Support Unicode.
  mingw32-make -f makefile.gcc BUILD=release SHARED=0 MONOLITHIC=0 UNICODE=1  

  echo Compile Debug Version
  mingw32-make -f makefile.gcc BUILD=debug SHARED=0 MONOLITHIC=0 UNICODE=1  

  echo ---------------------------------------------------------------------  
  echo Compile Succeed.
  pause  

  執行該文件,即可完成編譯。 (各編譯選項的詳細解釋,見本文最后的附錄)

  注意:

  對於 wxWidgets 3.0.2 + CodeBlocks 16.02 (GCC 4.9.2) 的編譯,在編譯過程中遇到 C++ 2011 的兼容性問題, wxWidgets 官方給的解決方案在這里

 

4. CodeBlocks 環境設置

  打開 CodeBlocks, Settings -> Global variables... , 添加 wx 變量和路徑如下圖,

  

 

5.  wx GUI 工程 demo

   

    

   

   

  默認工程的運行結果如下,

   

  至此,環境搭好了。

 

6. 最后的問題。

  基於 MinGW-GCC 編譯的程序,要依賴相關的 .dll 庫運行,所以,把生成的 exe 文件拷貝到其它電腦,將出現以下錯誤,

  

  解決方法,右鍵點擊工程,選擇 Build options,

  

 

  分別將 Debug 和 Release 的 Linker settings 標簽下的 Other Linker options 下添加 -static 鏈接選項。

  

 

  重新編譯工程。這樣生成的 exe 即可脫離開發環境運行。

 

附錄. 各編譯選項的解釋

 

BUILD 控制 wxWidgets 構建調試版本 (BUILD=debug)或者是發布版本(BUILD=release)。

- debug 構建 wxWidgets 會創建帶有 ”d” 后綴的庫,例如 ”libwxmsw28d.a”、”wxmsw28d_gcc_custom.dll”。

- debug 構建 wxWidgets 會在 wxWidgets 庫的輸出目錄中創建 ”mswd” 或者 “mswud” 目錄。

- release 構建 wxWidgets 創建的庫沒有 ”d” 后綴,例如 ”libwxmsw28.a”、”wxmsw28_gcc_custom.dll”。

- release 構建 wxWidgets 會在 wxWidgets 庫的輸出目錄中創建 ”msw” 或者 “mswu” 目錄。

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=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 控制 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” 目錄。

 

其他問題可參考 wxWidgets 開發者論壇

完。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM