標籤:
宮指導說,換帥如換刀
程式員的編譯器一換,基本套路必須都重練幾次
使用wxWidgets並不難,但不能使用現有的庫和工程設定檔,細節就必須理清楚
擷取wxWidgets
官方的下載頁面,下7z或zip檔案均可
檔案“wxWidgets根目錄/docs/msw/install.txt”是編譯說明文檔,可以作為參考
添加環境變數WXWIN,值是wxWidgets根目錄的路徑
wxWidgets根目錄的路徑不要含有空格
增加vs2015支援
vs2015影響編譯的改動,主要是定義了snprintf,以及編譯器版本升級到14。
需要對wxWidgets作如下修改,才能使用vs2015進行編譯。
%WXWIN%\include\msvc\wx\setup.h,66行,增加版本支援
#elif _MSC_VER == 1900 #define wxCOMPILER_PREFIX vc140
%WXWIN%\include\wx\compiler.h,56行,增加版本支援
#elif __VISUALC__ < 2000# define __VISUALC14__
在下面三個檔案中,找到snprintf的宏定義,注釋掉
- %WXWIN%\src\tiff\libtiff\tif_config.h
- %WXWIN%\src\tiff\libtiff\tif_config.vc.h
- %WXWIN%\src\zlib\gzguts.h
編譯庫檔案
運行“開始|所有程式|visual studio 2015|visual studio tools|VS2015 開發人員命令提示”
切換到%WXWIN%\build\msw
32位靜態庫DEBUG版
nmake /f makefile.vc
庫檔案產生在%WXWIN%\lib\vc_lib,檔案名稱含d表示debug版
32位靜態庫RELEASE版
nmake /f makefile.vc BUILD=release
庫檔案產生在%WXWIN%\lib\vc_lib,檔案名稱不含d與debug版區分
32位動態庫DEBUG版
nmake /f makefile.vc SHARED=1
庫檔案產生在%WXWIN%\lib\vc_dll,檔案名稱含d表示debug版
32位動態庫RELEASE版
nmake /f makefile.vc BUILD=release SHARED=1
庫檔案產生在%WXWIN%\lib\vc_dll,檔案名稱不含d與debug版區分
運行“開始|所有程式|visual studio 2015|visual studio tools|Windows Desktop Command Prompts|VS2015 x64 本機工具命令提示字元”
切換到%WXWIN%\build\msw
64位靜態庫DEBUG版
nmake /f makefile.vc TARGET_CPU=X64
庫檔案產生在%WXWIN%\lib\vc_x64_lib,檔案名稱含d表示debug版
64位靜態庫RELEASE版
nmake /f makefile.vc BUILD=release TARGET_CPU=X64
庫檔案產生在%WXWIN%\lib\vc_x64_lib,檔案名稱不含d與debug版區分
64位動態庫DEBUG版
nmake /f makefile.vc SHARED=1 TARGET_CPU=X64
庫檔案產生在%WXWIN%\lib\vc_x64_dll,檔案名稱含d表示debug版
64位動態庫RELEASE版
nmake /f makefile.vc BUILD=release SHARED=1 TARGET_CPU=X64
庫檔案產生在%WXWIN%\lib\vc_x64_dll,檔案名稱不含d與debug版區分
“Hello world”之
官方源碼
// wxWidgets "Hello world" Program// For compilers that support precompilation, includes "wx/wx.h".#include <wx/wxprec.h>#ifndef WX_PRECOMP#include <wx/wx.h>#endifclass MyApp : public wxApp{public: virtual bool OnInit();};class MyFrame : public wxFrame{public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);private: void OnHello(wxCommandEvent& event); void OnExit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); wxDECLARE_EVENT_TABLE();};enum{ ID_Hello = 1};wxBEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Hello, MyFrame::OnHello) EVT_MENU(wxID_EXIT, MyFrame::OnExit) EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) wxEND_EVENT_TABLE()wxIMPLEMENT_APP(MyApp);bool MyApp::OnInit(){ MyFrame *frame = new MyFrame("Hello World", wxPoint(50, 50), wxSize(450, 340)); frame->Show(true); return true;}MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size){ wxMenu *menuFile = new wxMenu; menuFile->Append(ID_Hello, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item"); menuFile->AppendSeparator(); menuFile->Append(wxID_EXIT); wxMenu *menuHelp = new wxMenu; menuHelp->Append(wxID_ABOUT); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append(menuFile, "&File"); menuBar->Append(menuHelp, "&Help"); SetMenuBar(menuBar); CreateStatusBar(); SetStatusText("Welcome to wxWidgets!");}void MyFrame::OnExit(wxCommandEvent& event){ Close(true);}void MyFrame::OnAbout(wxCommandEvent& event){ wxMessageBox("This is a wxWidgets‘ Hello world sample", "About Hello World", wxOK | wxICON_INFORMATION);}void MyFrame::OnHello(wxCommandEvent& event){ wxLogMessage("Hello world from wxWidgets!");}
靜態庫DEBUG方案的編譯
“工程屬性|C/C++|常規|附加元件封裝含目錄”,添加
%WXWIN%\include
“工程屬性|連結器|常規|附加庫目錄”,添加
%WXWIN%\lib\vc_lib
“工程屬性|連結器|輸入|附加依賴項”,添加
wxbase30ud.libwxbase30ud_net.libwxbase30ud_xml.libwxexpatd.libwxjpegd.libwxmsw30ud_adv.libwxmsw30ud_aui.libwxmsw30ud_core.libwxmsw30ud_gl.libwxmsw30ud_html.libwxmsw30ud_media.libwxmsw30ud_propgrid.libwxmsw30ud_qa.libwxmsw30ud_ribbon.libwxmsw30ud_richtext.libwxmsw30ud_stc.libwxmsw30ud_webview.libwxmsw30ud_xrc.libwxpngd.libwxregexud.libwxscintillad.libwxtiffd.libwxzlibd.libwinmm.libcomctl32.librpcrt4.libwsock32.libwininet.lib
推薦用這種方式添加依賴項,而不寫#pragmma comment,方便切換不同方案,代碼也美觀
最後5個依賴項並不屬於wxWidgets,別漏了
編譯運行,成功~
靜態庫RELEASE方案的編譯
附加庫目錄的路徑不同,要修改
依賴庫的名字不同,把d去掉
動態庫方案的編譯
“工程屬性|C/C++|前置處理器|附加元件封裝含目錄”,添加
WXUSINGDLL
Visual Studio 2015編譯wxWidgets