Visual Studio 2015编译wxWidgets

宫指导说,换帅如换刀

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

使用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行,增加版本支持

1#elif _MSC_VER == 1900 2 #define wxCOMPILER_PREFIX vc140

%WXWIN%\include\wx\compiler.h,56行,增加版本支持

1#elif __VISUALC__ < 2000 2 #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”之

官方源码

复制代码

1// wxWidgets "Hello world" Program 2// For compilers that support precompilation, includes "wx/wx.h". 3#include <wx/wxprec.h> 4#ifndef WX_PRECOMP 5#include <wx/wx.h> 6#endif 7class MyApp : public wxApp 8{ 9public: 10 virtual bool OnInit(); 11}; 12class MyFrame : public wxFrame 13{ 14public: 15 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); 16private: 17 void OnHello(wxCommandEvent& event); 18 void OnExit(wxCommandEvent& event); 19 void OnAbout(wxCommandEvent& event); 20 wxDECLARE_EVENT_TABLE(); 21}; 22enum 23{ 24 ID_Hello = 1 25}; 26wxBEGIN_EVENT_TABLE(MyFrame, wxFrame) 27 EVT_MENU(ID_Hello, MyFrame::OnHello) 28 EVT_MENU(wxID_EXIT, MyFrame::OnExit) 29 EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) 30 wxEND_EVENT_TABLE() 31wxIMPLEMENT_APP(MyApp); 32bool MyApp::OnInit() 33{ 34 MyFrame *frame = new MyFrame("Hello World", wxPoint(50, 50), wxSize(450, 340)); 35 frame->Show(true); 36 return true; 37} 38MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) 39 : wxFrame(NULL, wxID_ANY, title, pos, size) 40{ 41 wxMenu *menuFile = new wxMenu; 42 menuFile->Append(ID_Hello, "&Hello...\tCtrl-H", 43 "Help string shown in status bar for this menu item"); 44 menuFile->AppendSeparator(); 45 menuFile->Append(wxID_EXIT); 46 wxMenu *menuHelp = new wxMenu; 47 menuHelp->Append(wxID_ABOUT); 48 wxMenuBar *menuBar = new wxMenuBar; 49 menuBar->Append(menuFile, "&File"); 50 menuBar->Append(menuHelp, "&Help"); 51 SetMenuBar(menuBar); 52 CreateStatusBar(); 53 SetStatusText("Welcome to wxWidgets!"); 54} 55void MyFrame::OnExit(wxCommandEvent& event) 56{ 57 Close(true); 58} 59void MyFrame::OnAbout(wxCommandEvent& event) 60{ 61 wxMessageBox("This is a wxWidgets' Hello world sample", 62 "About Hello World", wxOK | wxICON_INFORMATION); 63} 64void MyFrame::OnHello(wxCommandEvent& event) 65{ 66 wxLogMessage("Hello world from wxWidgets!"); 67}

复制代码

静态库DEBUG方案的编译

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

%WXWIN%\include

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

%WXWIN%\lib\vc_lib

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

复制代码

1wxbase30ud.lib 2wxbase30ud_net.lib 3wxbase30ud_xml.lib 4wxexpatd.lib 5wxjpegd.lib 6wxmsw30ud_adv.lib 7wxmsw30ud_aui.lib 8wxmsw30ud_core.lib 9wxmsw30ud_gl.lib 10wxmsw30ud_html.lib 11wxmsw30ud_media.lib 12wxmsw30ud_propgrid.lib 13wxmsw30ud_qa.lib 14wxmsw30ud_ribbon.lib 15wxmsw30ud_richtext.lib 16wxmsw30ud_stc.lib 17wxmsw30ud_webview.lib 18wxmsw30ud_xrc.lib 19wxpngd.lib 20wxregexud.lib 21wxscintillad.lib 22wxtiffd.lib 23wxzlibd.lib 24winmm.lib 25comctl32.lib 26rpcrt4.lib 27wsock32.lib 28wininet.lib

复制代码

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

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

编译运行,成功~

静态库RELEASE方案的编译

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

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

动态库方案的编译

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

WXUSINGDLL
点赞
收藏

评论区

加载中...

相关推荐

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:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Visual Studio 2015编译wxWidgets - HelloWorld