Visual Studio 2015編譯wxWidgets

來源:互聯網
上載者:User

標籤:

宮指導說,換帥如換刀

程式員的編譯器一換,基本套路必須都重練幾次

使用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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.