Visual Studio 2015编译wxWidgets

Wesley13
• 阅读 337

宫指导说,换帅如换刀

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

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

获取wxWidgets

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

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

添加环境变量WXWIN,值是wxWidgets根目录的路径。虽然不添加变量也可以编译,但很多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”之

官方源码

Visual Studio 2015编译wxWidgets

// 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!");
}

Visual Studio 2015编译wxWidgets

静态库DEBUG方案的编译

“工程属性|C/C++|常规|附加包含目录”,添加

%WXWIN%\include

“工程属性|链接器|常规|附加库目录”,添加

%WXWIN%\lib\vc_lib

“工程属性|链接器|输入|附加依赖项”,添加

Visual Studio 2015编译wxWidgets

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

Visual Studio 2015编译wxWidgets

推荐用这种方式添加依赖项,而不写#pragmma comment,方便切换不同方案,代码也美观

最后5个依赖项并不属于wxWidgets,别漏了

编译运行,成功~

静态库RELEASE方案的编译

附加库目录的路径不同,要修改

依赖库的名字不同,把d去掉

动态库方案的编译

“工程属性|C/C++|预处理器|预处理器定义”,添加

WXUSINGDLL
点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
2个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi /etc/profile2:按字母键i进入编辑模式,在最底部添加内容: JAVAHOME/opt/jdk1.8.0152 CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar PATH$JAVAHOME/bin:$PATH3:生效配置
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。 1、使用解构获取json数据let jsonData   id: 1, status: "OK", data: ['a', 'b'] ; let  id, status, data: number   jsonData; console.log(id, status, number )
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
Wesley13 Wesley13
1年前
Java爬虫之JSoup使用教程
title: Java爬虫之JSoup使用教程 date: 2018-12-24 8:00:00 +0800 update: 2018-12-24 8:00:00 +0800 author: me cover: [https://img-blog.csdnimg.cn/20181224144920712](https://www.oschin
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置 1、virsh edit centos7 找到“memory”和“vcpu”标签,将 <name>centos7</name> <uuid>2220a6d1-a36a-4fbb-8523-e078b3dfe795</uuid>
Wesley13 Wesley13
1年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表: **时辰** **时间** **24时制** 子时 深夜 11:00 - 凌晨 01:00 23:00 - 01 :00 丑时 上午 01:00 - 上午 03:00 01:00 - 03 :00 寅时 上午 03:00 - 上午 0
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序 select * from table_name order id desc; 2.按照指定(多个)字段排序 select * from table_name order id desc,status desc; 3.按照指定字段和规则排序 selec
Stella981 Stella981
1年前
Angular material mat
Icon Icon Name mat-icon code _add\_comment_ add comment icon <mat-icon> add\_comment</mat-icon> _attach\_file_ attach file icon <mat-icon> attach\_file</mat-icon> _attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
#### 背景描述 # Time: 2019-01-24T00:08:14.705724+08:00 # User@Host: **[**] @ [**] Id: ** # Schema: sentrymeta Last_errno: 0 Killed: 0 # Query_time: 0.315758 Lock_
helloworld_34035044 helloworld_34035044
4个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。 uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid() 或 uuid(sep)参数说明:sep 布尔值,生成的uuid中是否包含分隔符'',缺省为