本文基於 CodeBlocks (16.01) 和 wxWidgets (3.0.2) 搭建 Windows 環境下 GUI 開發環境。php
1. CodeBlocks 官網,下載最新版安裝包 codeblocks-16.01mingw-setup.exe git
此版本包含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).github
個人安裝目錄: C:\Program Files (x86)\CodeBlocks, 後續編譯要用到 CodeBlocks 內含的編譯器,故將 C:\Program Files (x86)\CodeBlocks\MinGW\bin 添加到環境變量 Path。
ui
2. wxWidgets 官網,下載源碼包,各文檔介紹以下圖,編碼
3. 解壓縮 wxMSW-3.0.2.7z 到 C:\wxMSW-3.0.2, 在該目錄下,新建 bat 文件 wxBuild_ver.0.1.bat, 內容以下,spa
@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
.net
執行該文件,便可完成編譯。 (各編譯選項的詳細解釋,見本文最後的附錄)debug
注意:調試
對於 wxWidgets 3.0.2 + CodeBlocks 16.02 (GCC 4.9.2) 的編譯,在編譯過程當中遇到 C++ 2011 的兼容性問題, wxWidgets 官方給的解決方案在這裏。code
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 開發者論壇
完。