zoukankan      html  css  js  c++  java
  • Visual Studio 2015编译wxWidgets

     

    宫指导说,换帅如换刀

    程序员的编译器一换,基本套路必须都重练几次

    使用wxWidgets并不难,但不能使用现有的库和工程配置文件,细节就必须理清楚

    获取wxWidgets

    官方的下载页面,下7z或zip文件均可

    文件“wxWidgets根目录/docs/msw/install.txt”是编译说明文档,可以作为参考

    添加环境变量WXWIN,值是wxWidgets根目录的路径。虽然不添加变量也可以编译,但很多wxWidgets插件的编译都依赖这个环境变量,因此最好加上。

    wxWidgets根目录的路径不要含有空格

    增加vs2015支持

    vs2015影响编译的改动,主要是定义了snprintf,以及编译器版本升级到14。

    需要对wxWidgets作如下修改,才能使用vs2015进行编译。

    %WXWIN%includemsvcwxsetup.h,66行,增加版本支持

        #elif _MSC_VER == 1900
            #define wxCOMPILER_PREFIX vc140

    %WXWIN%includewxcompiler.h,56行,增加版本支持

    #elif __VISUALC__ < 2000
        #define __VISUALC14__

    在下面三个文件中,找到snprintf的宏定义,注释掉

    •   %WXWIN%src ifflibtiff if_config.h
    •   %WXWIN%src ifflibtiff if_config.vc.h
    •   %WXWIN%srczlibgzguts.h

    编译库文件

    运行“开始|所有程序|visual studio 2015|visual studio tools|VS2015 开发人员命令提示”

    切换到%WXWIN%uildmsw

    32位静态库DEBUG版

    nmake /f makefile.vc

    库文件生成在%WXWIN%libvc_lib,文件名含d表示debug版

    32位静态库RELEASE版

    nmake /f makefile.vc BUILD=release

    库文件生成在%WXWIN%libvc_lib,文件名不含d与debug版区分

    32位动态库DEBUG版

    nmake /f makefile.vc SHARED=1

    库文件生成在%WXWIN%libvc_dll,文件名含d表示debug版

    32位动态库RELEASE版

    nmake /f makefile.vc BUILD=release SHARED=1

    库文件生成在%WXWIN%libvc_dll,文件名不含d与debug版区分

    运行“开始|所有程序|visual studio 2015|visual studio tools|Windows Desktop Command Prompts|VS2015 x64 本机工具命令提示符”

    切换到%WXWIN%uildmsw

    64位静态库DEBUG版

    nmake /f makefile.vc TARGET_CPU=X64

    库文件生成在%WXWIN%libvc_x64_lib,文件名含d表示debug版

    64位静态库RELEASE版

    nmake /f makefile.vc BUILD=release TARGET_CPU=X64

    库文件生成在%WXWIN%libvc_x64_lib,文件名不含d与debug版区分

    64位动态库DEBUG版

    nmake /f makefile.vc SHARED=1 TARGET_CPU=X64

    库文件生成在%WXWIN%libvc_x64_dll,文件名含d表示debug版

    64位动态库RELEASE版

    nmake /f makefile.vc BUILD=release SHARED=1 TARGET_CPU=X64

    库文件生成在%WXWIN%libvc_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...	Ctrl-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%libvc_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
  • 相关阅读:
    水平垂直居中的四种方法
    对js数组方法的部分了解以及面试内容
    第三阶段——jS——webApi编程——BOM
    对于VUE中slot的理解与学习
    第三阶段——jS——webApi编程——DOM
    初学node,关于使用req.body,打印的值为空解决方法
    第三阶段:javaScript 网页编程基本内容
    第三阶段——jS——webApi编程——移动端事件+JQuery+js面向对象
    2005129考勤登记
    200525考勤登记
  • 原文地址:https://www.cnblogs.com/yuanxiaoping_21cn_com/p/9206582.html
Copyright © 2011-2022 走看看