VC 6 0下wxWidgets工具的配置

2021-05-24 09:37:47 字數 4220 閱讀 1118

和 gtk、qt、swt、swing 一樣,wxwidgets 也是一種開源跨平台的 gui 框架。因 wxwidgets 和 mfc 有些淵源,有些親近,故要體驗一番 wxwidgets。現在最新版是 2.8.7。wxwidgets 程式還可執行於 windows ce、palm os。不但包括 gui,還有 media、socket、odbc 等庫。

本篇介紹 vc++6.0 下如何搭建 wxwidgets 的開發環境,包括編譯 wxwidgets 原始碼和配置 vc 環境。所用 wxwidgets 的版本是 2.8.7。

注意要給 wxwidgets 有足夠的剩餘空間,單是編譯乙個版本的靜態庫就會增至300多m,如果還要編譯動態庫再選擇上 debug 或者 release、ascii 或是 unicode 等,還要編譯 sample 的話,最後空間能夠暴到 2g。

第二步:編譯 wxwidgets

編譯方式有兩種,一種是在 vc++ 中開啟 wx.dsw 進行編譯,另一種是用 nmake 在命令列下編譯。

1) nmake 編譯

執行 cmd.exe 來到命令列下,進入到目錄 d:/wxwidgets-2.8.7,然後執行

d:/wxwidgets-2.8.7>nmake -f makefile.vc

預設是編譯成 debug 版的靜態庫。也許我們在編譯之前需要根據自己的需要進行一些設定:

開啟 d:/wxwidgets-2.8.7/include/wx/msw/setup.h

保證第 110 行的 #define wxuse_debug_new_always 設定為 0。預設是 0 的。

將 1137 行的 #define wxuse_iostreamh 設定為 0,否則無法使用 vc 的模板庫(不能用 std 命名空間下的)。預設是 1。

如果要使用 wxwidgets 提供支援資料庫的 odbc 類,將 #define wxuse_odbc 設為 1。預設是 1。

如果你想生成動態庫,或生成的是 release 版的,你可以修改 d:/wxwidgets-2.8.7/build/msw/config.vc 檔案。開啟該檔案你能看到可以更改的選項,其中重要的幾個如下:

# what type of library to build? [0,1] -- 生成庫的型別,0為靜態庫,1為動態庫

shared = 0

# compile unicode build of wxwidgets? [0,1] -- 是否使和 unicode,0 否,1 是

unicode = 0

# type of compiled binaries [debug,release] -- 是 debug 還是 release

build = debug

其中還有許多顧名思義的選項,請根據需求修改。

對於 config.vc 中的選項也可以通過命令列覆蓋掉配置檔案中的值,如編譯命令用

d:/wxwidgets-2.8.7>nmake -f makefile.vc shared=1 unicode=1 build=release

就是編譯 release 版,支援 unicode 的動態庫了。

動態庫和靜態庫的不同體現在使用上,靜態庫中的**能編譯進應用程式的 exe 檔案中,這個 exe 檔案可單獨發布,但體積較龐大。動態庫可讓 exe 檔案執行時載入,雖然 exe 檔案體積小了,但發布時必須帶著相應的動態庫檔案。

2) vc 編譯

還可用 vc++ 開啟 d:/wxwidgets-2.8.7/build/msw/wx.dsw,然後選擇 build->batch build... ,我們看到每個工程都有 16 個配置,請根據應用需求勾選你的配置,如所有工程的 win32 release 和 win32 debug 版本,然後 build,如果你照單全收,編譯將非常耗時而佔空間。這種編譯方式就是可以一下操作幫你編譯出所有需要的版本。

好,等等編譯完之後,在目錄 d:/wxwidgets-2.8.7/lib/ 會有產生乙個目錄:vc_lib 是靜態庫的目錄,預設編譯有 17 個靜態。如果是編譯成動態庫則會產生目錄 vc_dll。在 vc_lib 中有 mswd 目錄,release 版對應的是 msw,裡面含有 debug 和 release 版的 setup.h。

注意到 debug 版和 release 以及和 unicode 、動態庫、靜態庫組合條件編譯生成的檔案和目錄名。

靜態庫編譯到 d:/wxwidgets-2.8.7/lib/vc_lib 目錄中

動態庫編譯到 d:/wxwidgets-2.8.7/lib/vc_dll 目錄中

檔案命名為 wxmsw28d_core.lib 檔案為例:

wxmsw28_core.lib         ---- release,非 unicode  版

wxmsw28d_core.lib       ---- debug,非 unicode  版

wxmsw28u_core.lib       ---- release,unicode  版

wxmsw28ud_core.lib     ---- debug,unicode  版

對於 dll 檔案的命名規範也一樣的。

在 vc_lib 和 vc_dll 下如果全編譯了會有四個目錄,msw、mswd、mswu、mswud 意義同上。

編譯完後可以把那些過程中的目標檔案刪了,它們佔的空間實在是太大。要是你還想以後重新編譯用就留著吧。

第三步:建立 wxwidgets 專案

注意:編譯成不同版的執行**應填入相應的 additional include directories 和 addtional library path。

編譯成依賴 dll 的執行檔案還需要加上預處理指令 wxusingdll

用unicode 編譯則需要加上預處理指令 _unicode

還有一種 universal 編譯,要加上預處理指令 __wxuniversal__

這樣乙個普通的wxwdigets專案就設定好了.

我們測試 wxwidgets 自帶的例子 minimal。新建乙個 minimal.cpp 檔案,內容同 d:/wxwidgets-2.8.7/samples/minimal/minimal.cpp,編譯,不出意外,成功了!

也可設定全域性的目錄

前面我們是為專案配置 additional include directories 和 additional library path。我們可以把這設定成全域性的。就可以不用在專案中單獨設定。全域性設定有其缺陷,無法分開是 vc_lib 還是 vc_dll 中的 lib,是 mswd 還是 msw 中的 wx/setup.h 檔案。在這裡設定 source files 還是必要的。並且在下面前兩個 include files 放在全域性設定裡也較合適。

進到 vc++ 的 tools->options->directories,選擇 "include files" 後,新增

d:/wxwidgets-2.8.7/include

d:/wxwidgets-2.8.7/contrib/include

d:/wxwidgets-2.8.7/lib/vc_lib/mswd

對應於 project settings -> c/c++ tab->preprocessor 中的 additional include directories

再選擇 "libraries files",新增

d:/wxwidgets-2.8.7/vc_lib

對應於 project settings -> link tab -> input 中的 additional library path

再選擇 "source files",新增

d:/wxwidgets-2.8.7/src

最後大致比較一下生成程式的大小

release 靜態庫版(vc_msw) minimal.exe 1.11m,可單獨發布

debug  靜態庫版(vc_mswd) minimal.exe 2.52m,可單獨發布

release 動態庫版(vc_mswdll)   minimal.exe 68k,加上wxmsw28_core_vc_custom.dll (2.85m) 和 wxbase28_vc_custom.dll (1.11m),共 4m

debug 動態庫版(vc_mswddll)  minimal.exe 96k,加上wxmsw28d_core_vc_custom.dll (4.26m) 和 wxbase28d_vc_custom.dll (1.82m),共 6.1m

這是乙個簡單的 wxwidgets 程式,只用到了兩個動態庫的情況。在用到 wxwidgets 庫較少時用靜態庫來編譯發布檔案會小一些,若是用到元件多的時候,可能用動態庫方便些,請酌情決定。

wxWidgets編譯和在VC 6 0中的配置

1 安裝 執行wxmsw 2.8.3 setup1.exe,將之安裝到不帶空格符號的目錄中,本例為c wxwidgets 2.8.3 2 編譯和配置 1 用vc6.0編譯 進入c wxwidgets 2.8.3 build msw,用vc開啟wx.dsw工程檔案。進入build batch buil...

vc6 0 除錯小結

現在都用vs2008了,vc6的速度還是很懷念,來個小結吧。斷點相關快捷鍵 1.f9在當前游標所在的行下斷點,如果當前行已經有斷點,則取消斷點.f5除錯狀態執行程式,程式執行到有斷點的地方會停下來.f10單步執行程式.ctrl f10執行到游標所在行.f11和f10的區別是,如果當前執行語句是函式呼...

VC 6 0遠端除錯

先明確下概念,遠端除錯嘛,自然是兩個機器之間除錯。程式執行在目標機器上,偵錯程式執行在本機。當然,目標機器上還是要有少許輔助程式才能跟本機的偵錯程式connect上,以便通訊。一般來說,只需要copy四個檔案到目標機器上就行了 msvcmon.exe dm.dll tln0t.dll和msdis11...