宮指導說,換帥如換刀html
程序員的編譯器一換,基本套路必須都重練幾回程序員
使用wxWidgets並不難,但不能使用現有的庫和工程配置文件,細節就必須理清楚web
獲取wxWidgets工具
官方的下載頁面,下7z或zip文件都可post
文件「wxWidgets根目錄/docs/msw/install.txt」是編譯說明文檔,能夠做爲參考ui
添加環境變量WXWIN,值是wxWidgets根目錄的路徑。雖然不添加變量也能夠編譯,但不少wxWidgets插件的編譯都依賴這個環境變量,所以最好加上。this
wxWidgets根目錄的路徑不要含有空格spa
增長vs2015支持插件
vs2015影響編譯的改動,主要是定義了snprintf,以及編譯器版本升級到14。debug
須要對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> #endif class 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.lib wxbase30ud_net.lib wxbase30ud_xml.lib wxexpatd.lib wxjpegd.lib wxmsw30ud_adv.lib wxmsw30ud_aui.lib wxmsw30ud_core.lib wxmsw30ud_gl.lib wxmsw30ud_html.lib wxmsw30ud_media.lib wxmsw30ud_propgrid.lib wxmsw30ud_qa.lib wxmsw30ud_ribbon.lib wxmsw30ud_richtext.lib wxmsw30ud_stc.lib wxmsw30ud_webview.lib wxmsw30ud_xrc.lib wxpngd.lib wxregexud.lib wxscintillad.lib wxtiffd.lib wxzlibd.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib wininet.lib
推薦用這種方式添加依賴項,而不寫#pragmma comment,方便切換不一樣方案,代碼也美觀
最後5個依賴項並不屬於wxWidgets,別漏了
編譯運行,成功~
靜態庫RELEASE方案的編譯
附加庫目錄的路徑不一樣,要修改
依賴庫的名字不一樣,把d去掉
動態庫方案的編譯
「工程屬性|C/C++|預處理器|預處理器定義」,添加
WXUSINGDLL